高速外部时钟HSE

image.png
image.png
image.png

从OSC_OUT、OSC_IN进入芯片,来源一般是8M的无源晶振,需要搭配无源电容C10、C34。如果使用有源晶振,OSC_OUT引脚悬空,从OSC_IN进入芯片。
image.png
image.png
image.png
通过配置RCC_CR寄存器的位16为1,开启HSE时钟,由于是无源晶振,等待无源电容使其稳定后硬件置位17为1,表示外部振荡器就绪。

高速内部时钟HSI

image.png
相比HSE,精度较低,受温度影响大,有温漂。当HSE故障时,系统时钟会自动切换到HSI,直到HSE启动成功。 由RCC_CR寄存器的位0、位1配置。
image.png

锁相环时钟配置

image.png
image.png
image.png
image.png
通过时钟配置寄存器(RCC_CFGR)的位16到位21来控制 PLLXTPRE、 PLLMUL 的数值。一般使用HSI时钟,位16位1,位17为0,PLLMUL为0111,输出时钟频率为8M×9=72M。
PLL时钟源头使用HSI/2或HSE/2的时候(8M/2=4M), PLLMUL最大只能是16,这个时候PLLCLK最大只能是64M(4M×16=64M),小于ST官方推荐的最大时钟72M 。

系统时钟

image.png
image.png
通常的配置是SYSCLK=PLLCLK=72M。 时钟配置寄存器(RCC_CFGR)的位0到位3来控制。

AHB时钟

image.png

APB时钟

image.png
image.png

低速外部时钟LSE

image.png
两个晶振,一个是贴片的,一个是直插的,兼容两者格式,只贴一个。也是无源晶振,搭配10pf的无源电容。从OSC32_OUT、OSC32_IN进入芯片,晶振为32.768kHZ。

低速内部时钟LSI

image.png
相比LSE,精度较低,受温度影响大,有温漂。当LSE故障时,系统时钟会自动切换LSI,直到HSE启动成功。 由RCC_CR寄存器的位0、位1配置。一般为30-60kHZ,取40kHz。

RTC时钟

image.png
RTC 时钟可由 HSE/128 分频得到,也可由低速外部时钟信号 LSE 提供,频率为32.768KHZ,也可由低速内部时钟信号 HSI 提供,具体选用哪个时钟由备份域控制寄存器BDCR 的位 9-8: RTCSEL[1:0]配置 。

MCO时钟输出

image.pngimage.png
MCO 是 microcontroller clock output 的缩写,是微控制器时钟输出引脚,在 STM32 F1系列中 由 PA8 复用所得,主要作用是可以对外提供时钟,相当于一个有源晶振。 MCO 的时钟来源可以是: PLLCLK/2、 HSI、 HSE、 SYSCLK,具体选哪个由时钟配置寄存器CFGR 的位 26-24: MCO[2:0]决定。 除了对外提供时钟这个作用之外, 我们还可以通过示波器监控 MCO 引脚的时钟输出来验证我们的系统时钟配置是否正确。

STM32 时钟树

image.png

系统时钟配置过程

image.png

时钟安全系统(CSS)

时钟安全系统可以通过软件被激活。一旦其被激活,时钟监测器将在HSE振荡器启动延迟后被使能,并在HSE时钟关闭后关闭。
如果HSE时钟发生故障, HSE振荡器被自动关闭,时钟失效事件将被送到高级定时器(TIM1和TIM8)的刹车输入端,并产生时钟安全中断CSSI,允许软件完成营救操作。此CSSI中断连接到Cortex™-M3的NMI中断(不可屏蔽中断)。

image.png
由高级控制定时器(TIM1和TIM8) 的框图可知,CSSI中断可由GPIO口或者CSS引起。

注意: 一旦CSS被激活,并且HSE时钟出现故障, CSS中断就产生,并且NMI也自动产生。 NMI将被不断执行,直到CSS中断挂起位被清除。因此,在NMI的处理程序中必须通过设置时钟中断寄存器(RCC_CIR)里的CSSC位来清除CSS中断。
如果HSE振荡器被直接或间接地作为系统时钟, (间接的意思是:它被作为PLL输入时钟,并且PLL时钟被作为系统时钟),时钟故障将导致系统时钟自动切换到HSI振荡器,同时外部HSE振荡器被关闭。在时钟失效时,如果HSE振荡器时钟(被分频或未被分频)是用作系统时钟的PLL的输入时钟, PLL也将被关闭。