时钟系统 Systick定时器 NVIC 自用笔记

时钟系统等(部分)

(注:对于stm32每个外设需要使用都需要使能相对应的时钟)
五个时钟:
LSI低速内部时钟:32khz 由RC振荡器产生,频率相对不是很稳定给独立看门狗,和自动唤醒单元作为时钟(时钟精度不高)

对于RTC,LSI和LSE、HSE都可以给它使能,但因为精确度的问题,一般选择LSE

SYSCLK系统时钟(不属于这五个时钟):三个来源:HSE、HSI、PLL时钟。
三时钟通过SW的产生系统时钟,可直接作为以太网PTP的时钟,也可通过AHB预分频器(PSC)配置相关的时钟。

系统时钟部分在这里插入图片描述

LSE低速外部时钟:32.768khz由相应晶振产生,较为精确
HSE高速外部时钟:通过外界晶振产生4-26MHz(若要用来使能RTC则需要通过一个2-31位的分频器分频后生成的时钟才可作为RTC时钟使用)
[
在这里插入图片描述

MCO2(对应PC9)和MCO1(对应PA8)对应芯片的两个引脚,可以把系统内部的时钟输出到两个引脚
MCO1可向PA8输出四种不同的时钟源HIS,LSE,HSE,PLL
MCO2可向PC9输出四种不同的时钟源HSE,PLL,SYSCLK,PLLI2S
MCO最大输出时钟不超过100MHz
(例如,sysclk最大频率为168MHz,则如果要给MCO作输出,要先分频)

]
HSI高速内部时钟:由内部RC振荡器产生16MHz时钟(精度不高 ),可作为MCO1时钟来源,(接选择器)也可直接作为系统时钟的来源。HSI时钟传到PLL时
PLL(锁相环/锁相回路): 锁相回路锁相环时用来统一整合时钟信号,使高频器件正常工作,如内存的存取资料等,用于振荡器中的反馈技术。HSE或HSI作为下图主PLL选择器时钟源,进行“/M”分频器分频后,产生一个频率再输入,可产生PLL时钟(为系统时钟提供时钟源)和PLL48CK时钟(为USBOTG,48MHz)。实际PLL就是通过倍频、分频实现时钟信号的转变。

主PLL
在这里插入图片描述
专用PLL
在这里插入图片描述
计算频率在这里插入图片描述

USBPHY的时钟和以太网MAC的时钟
在这里插入图片描述

寄存器中相关函数
1.时钟使能配置:
RCC_HSICmd, RCC_LSICmd, RCC_PLLCmd,RCC_PLLI2sCmd,
RCC_PLLSAICmd, RCC_RTCCLKCmd,
RCC_AHBxPeriphClockCmdRCC_APBxPeriphClockCmd
2.时钟源和时钟相关配置:
RCC_HSEConfig,RCC_LSEConfig,RCC_PLLConfig, RCC_PLLI2SConficRCC_PLLSAIConfig,RCC_MCO1Config,
RCC_MCO2Config,RCC_sYSCLKConfig,RCC_HCLKConfig,
RCC_PCLK1Config,RCC_PCLK2Config,RCC_RTCCLKConfig,RCC_12SCLKConfig
3.外设复位函数:
RCC_AHB1PeriphResetCmd,RCC_AHB2PeriphResetCmd,
RCC_AHB3PeriphResetCmd,RCC_APB1PeriphResetCmd,
RCCAPB2PeriphResetCmd
4.状态参数获取参数:
RCC_GetsYSCLKSource,
RCC_GetClocksFreq,
RCC_GetFlagStatus,RCC_ClearFlag
5.RCC中断相关函数:
RCC_ITConfig,RCC_ClearITPendingBit,RCC_GetITStatus

(注:固件库里面基本没有调用HSI,HSE等等时钟源配置函数,因为默认系统时钟初始化是在Systemlnit里面设置,它是直接操作寄存器来设置的。)
设置SystemInit——1.配置Hclock,Pclock1,Pclock2
2.PLL选择时钟源(一般选HSE,HSE出问题会通过CSS调控另选其他时钟)
3.配置PLL的clock,等待其就绪
4.系统时钟选择PLL为时钟源,等其就绪。
(实例:先打开HSE时钟,等其使能,并设置AHB,APBx的分频系数,选择HSE为主PLL时钟源,配置主PLL的倍频、分频系数,从PLL输入的时钟源产生PLLCLK使能,SYSCLK以其为时钟源进行配置)

Systick定时器

Systick定时器是一个24位定时器,当倒数到0时将从RELOAD寄存器中自动重新装载定时初值。只要不把它在Systic控制及状态寄存器中的使能位清除,它就永不停息。(简单来说就是让CPU一直进行重复计数;systic定时器主要是用来替代其他其他定时器做延时,从而达到节省MCU资源的目的)。

Systick定时器相关寄存器:

CTRL Systick控制和状态寄存器:存放使能位、中断位、时钟源选择位等(其第0位可以使能计数器)
位16:当前值寄存器递减到0,位16置1
位2:时钟源选择位
0:使用外部参考时钟
1:使用内核时钟
位1:0使能SysTick中断,当前值寄存器递减到0时产生中断
位0:0SysTick时钟使能;
LOAD Systick自动重装载值寄存器:计数器倒数到0时重装载值(当前值寄存器为0时,自动将重装载值重装到当前值计数器,重装载值的大小需要自己设置);
VAL Systick当前值寄存器:随着时钟一直递减,递减到0时使LOAD Systick重装载(则计数器从这个值继续递减,注意使用前后记得清零)。

实现原理图
在这里插入图片描述
在这里插入图片描述

systick定时器进行工作时,先将LOAD的值置入VAL寄存器中,VAL开始倒数减一,每一个减一经过一个Systick定时器设置的时钟频率

NVIC

NVIC,提供中断控制器,用于总体管理异常,称之为“内嵌向量中断控制器——Nested Vectored Interrupt Controller (NVIC)。NVIC 依照优先级处理所有支持的异常,每个中断可以支持 4 级离散中断优先级;STM32的中断向量有两个属性,一个为抢占属性,一个为响应属性,其属性编号越小优先级越高。
抢占属性:也叫打断属性,是指执行某中断过程时系统遇到优先级更高的中断过程,先中断正在进行的中断过程执行优先级高的再执行原中断过程;
响应属性:两个中断向量的抢占优先级相同时,如果两个中断同时到达,则先执行相应优先级较高的中断。

STM32的指定中断优先级的寄存器位有4位,这4个寄存器位的分组方式如下:
第0组:所有4位用于指定响应优先级
第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级
第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级
第4组:所有4位用于指定抢占式优先级
STM32用高四位来表示抢占和响应优先级:bit=1表示抢占;bit=0表示非抢占;所以共有5种情况:
  Bit7  Bit6 Bit5   Bit4
第0组 0   0   0   0
第1组 1   0   0   0
第2组 1   1   0   0
第3组 1   1   1   0
第4组 1   1   1   1
优先级别:数字越小优先级越高,抢占级数字小的可剥夺抢占级数字大的
规则:
1.抢占相同,响应优先级不同,此时没有抢占剥夺,此时按照响应优先级顺序排序;
2.抢占和响应优先级都相同但有先后,此时无抢占剥夺,依照FIFO(先进先出),前一个执行完了才能执行后者;
3.抢占和响应优先级都相同且同时到达,此时按照中断向量表顺序排先后。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值