STM32时钟树解析及配置详解

从stm32数据手册中我们可以看到关于stm32的许多组成部分,RCC、GPIO、DMA、ADC、DAC和定时器等。而其中最重要的就是时钟系统,若将stm32比作人的话,时钟就是stm32的心脏,GPIO是它的四肢。时钟系统为stm32提供能量,stm32能否正常的运行的核心就要时钟系统的正常运行。
stm32时钟树如下所示:

一眼看去stm32的时钟系统非常的复杂,但是总体来说可以分为三个部分:时钟源输入、时钟分频/倍频、时钟输出。

途中红色部分表示时钟源的输入部分,蓝色部分为时钟源输出部分,其余为时钟分频/倍频。

时钟源:

首先看时钟源输入部分,stm32的时钟来源可以分为4个来源:
高速内部时钟(HSI):内部RC振荡器产生,8MHz,但不稳定,可直接作为系统时钟或在2分频后作为PLL输入。
高速外部时钟(HSE):使用外部晶振,通过OSC_IN和OSC_OUT引脚引入,晶振频率范围为4~16MHz,通常采用8MHz。
低速内部时钟(LSI):内部RC振荡器产生,约40kHz。
低速外部时钟(LSE):使用外部晶振,通过OSC32_IN和OSC32_OUT引脚引入,通常采用32.768kHz晶振频率,主要提供给实时时钟和独立看门狗。

stm32 时钟来源可以分为高速时钟和低速时钟,高速时钟作为系统的主时钟,低速时钟只能是提供给微控制器芯片的实时时钟(RTC)和独立看门狗(IWDG)使用。
stm32的时钟源可以来自内部,由微控制器芯片内的RC振荡器产生,起振较快。所以,微控制器刚上电时,默认使用内部高速时钟。而stm32 的外部时钟来自芯片之外的晶振输入,但精度较高,稳定性好。所以,系统上电后通过软件配置,通常转而使用外部时钟。

系统时钟: stm32微控制器的主要工作时钟。也就是高速时钟经过分频或倍频处理后得到的时钟信号,最高72MHz

外部时钟晶振的选择: 对于高速外部时钟,stm32数据手册中的选择范围是4~16MHz,但大多数系统采用的外部晶振均为8MHz,因为8MHz在通过简单的倍频后就可得到72MHz的最高频率,即只需对骑进行9倍频;对于低速外部时钟:选用32.768kHz晶振,32768=2^15,也就是说,32.765kHz经过15次二分频后就可以得到1Hz的时钟频率,即1S的时间,若换为其他频率晶振后就时间就不对了。

时钟分频/倍频

由时钟源输入时钟信号后,交由倍频器和分频器处理。其作用就是,将输入的时钟信号经处理后变为72MHz的系统时钟,然后按个各级总线或外设的输出时钟要求对72MHz的系统时钟分频处理。
例如:8MHz的外部时钟首先通过锁相环分频器PLLXTPRE进行2分频或者不分频,然后再通过锁相环来源选择开关PLLSRC,连接到锁相环倍频器PLLMUL。倍频器可以选择2~16倍的倍频,如选择9倍频,可得到最高72MHz。72MHz的系统时钟若要输出到APB1总线上,但APB1总线的最高频率要求为32MHz,这时就要APB1预分频器对系统时钟进行2分频后才可到达要求。
简单的说这一部分就是将得到的时钟信号经过分频倍频后得到72MHz,然后再将72MHz变为不同频率的时钟信号作为对应输出。

时钟信号输出

时钟输出就是将时钟信号输出到不同的总线设备或者外设上,但是stm32微控制器为了实现低功耗,所有的外设输出均默认为关闭的状态。时钟的最后输出和分频器之间还有一个与门,若要对对应的外设输出时钟信号首先就要对其使能,只有使能了之后与门才能导通,时钟信号才可以顺利输出。

stm32微控制器也可以向外部的MCO口输出时钟信号,相应的GPIO端口寄存器必须被配置为相应功能。时钟来源可以是系统时钟、高速外部时钟、高速内部时钟和2分频后的倍频器时钟信号。

总结

stm32时钟树咋一看是一个十分庞大的系统,但将其拆分开,各个部分的功能理清楚后,它的脉络将会很清晰,就是从左侧时钟源开始,经倍频、分频和一系列控制开关,逐步获得微控制器的系统内核、各级总线、各种外设的时钟信号。时钟是嵌入式学习中重要的一部分,有人觉得它可有可无并且又看不到,但只有掌握了它才可以更清楚的了解stm32芯片内部的运行过程,打好基础才能学得更好。

物联沃分享整理
物联沃-IOTWORD物联网 » STM32时钟树解析及配置详解

发表评论