时钟系统等(部分) )注:每个stm32外围设备都需要支持的时钟() ) ) ) ) ) ) )。
5个时钟:LSI低速内部时钟:32khz由RC振荡器产生,频率对于独立的看门狗相对不稳定,并且自动唤醒单元用作时钟(时钟精度不高)。
对于RTC,可以在LSI、LSE和HSE中都启用,但是一般从精度问题出发选择LSE
SYSCLK系统时钟(不属于这五个时钟) HSE、HSI和PLL时钟这三个源。
三态时钟可以经由SW生成系统时钟直接用作以太网PTP的时钟,并且相关联的时钟可以经由AHB分束器(PSC )配置。
系统时钟部分
LSE低速外部时钟:32.768khz来自相应晶体振子,而HSE高速外部时钟:从外部晶体振子产生4-26 MHz (2- 31位以使RTC有效)
[
MCO1 (支持pc9 )和MCO1(支持PA8 )芯片的两个引脚可以将系统内部的时钟输出到两个引脚
MCO1可以向PA8输出4种不同的时钟源HIS、LSE、HSE、PLL
MCO2可以向PC9输出4种不同的时钟源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 _ pl li2 sconficrcc _ 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时钟,等待准备就绪
4 .系统时钟选择PLL作为时钟源,并等待就绪。
)例)先接通HSE时钟,等待启用,设置AHB、APBx的分频系数,选择HSE为主PLL的时钟源,配置主PLL的倍频、分频系数,通过PLL输入的时钟源
Systick计时器Systick计时器是24位计时器,当倒计时变为0时,从RELOAD寄存器自动重新加载定时初始值。 除非清除Systic控制和状态寄存器的有效位,否则它不会停止。 (简而言之,让CPU继续重复计数; systic计时器主要用于延迟而不是其他计时器,以节省MC
U资源的目的)。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定时器设置的时钟频率
NVICNVIC,提供中断控制器,用于总体管理异常,称之为“内嵌向量中断控制器——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.抢占和响应优先级都相同且同时到达,此时按照中断向量表顺序排先后。