STM32时钟树详解

对STM32的时钟树,可以从两个方面来思考

         输入了什么                      经过怎样的处理                 输出给哪些设备
      时钟源作用输入                 经过 分/倍 频处理  输出给外设,内部,外部做时钟信号 

STM32时钟树详解下面是STM32的时钟树

STM32时钟树详解

 

时钟源包括哪些

1)高速内部时钟(HSI):HSI时钟信号由内部8MHz的RC振荡器产生,可直接作为系统时钟或在2分频后作为PLL输入。
      HSI RC振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间比HSE晶体振荡器短。然而,即使在校准之后          它的时钟频率精度仍较差 。

2)高速外部时钟(HSE):以外部晶振作为时钟源,频率范围为4~16M,一般采用8MHZ晶振           

3)低速内部时钟(LSI): LSI RC担当一个低功耗时钟源的角色,它可以在停机和待机模式下保持运行,为独立看门狗和
      自动唤醒单元提供时钟。 LSI时钟频率大约40kHz(在30kHz和60kHz之间)。

4)低速外部时钟(LSE): LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器。它为实时时钟或者其他定时功能提供
      一个低功耗且精确的时钟源。

图中红色实线部份是STM32的时钟主线:

1:高速内部时钟HSI(4-16M),作为主时钟的输入信号源,可以在芯片外部接有源晶振或者无源晶振,我的开发板上使用的是8MHz的无源晶振作为外部时钟信号的来源。PLL通过时钟配置寄存器RCC_CFGR的第17位PLLXTPRE来控制HSI是否2分频后进入PLL时钟。

STM32时钟树详解

从(1)中经过选择出来的时钟信号,紧接着被传递到(2)部分中

2:第(2)部份PLLSRC,PLL输入时钟源选择。一是HSE就是上述第(1)部分过来的时钟。二是HSI/2. PLL通过时钟配置寄存器

RCC_CFGR的第16位PLLSRC来选择PLL时钟源的输入。

STM32时钟树详解

从(2)中经过选择出来的时钟信号,紧接着被传递到(3)部分中 PLLMUL

3:第(3)部份PLLMUL是设置PLL的倍频系数,最大输出不超过72M,最大16倍频。可通过RCC_CFGR的21:18来设置倍频系数。

我们PLL的时钟来源为HSE 8MHZ,经过倍频为72M=8M*9,72M是ST官方推荐的稳定运行时钟.

STM32时钟树详解

从(3)中经过选择出来的时钟信号,紧接着被传递到(4)部分中 SYSCLK

4:SYSCLK是系统时钟源选择。从图中我们可以看出SYSCLK的时钟来源可以是:HSI, PLLMUL,HSE,可以通过RCC_CFGR的1:0位来选择时钟源的输入。

STM32时钟树详解

5:AHB分频器,AHB总线时钟HCLK,也就是所有外围设备的时钟信号的总集了.

系统时钟 SYSCLK 经过(5)中的 AHB 预分频器分频之后得到时钟叫 APB 总线时钟,即 HCLK,分频因子可以是:[1, 2, 4, 8, 16, 64, 128, 256, 512],具体的由时钟配置寄存器 CFGR的位 7-4 :HPRE[3:0]设置。片上大部分外设的时钟都是经过 HCLK 分频得到,至于 AHB总线上的外设的时钟设置为多少,得等到我们使用该外设的时候才设置,我们这里只需粗线条的设置好 APB 的时钟即可。 我们这里设置为 1 分频,即 HCLK=SYSCLK=72M。

到这里,从(5)中出来的HCLK信号就会被送往各外设中去了。这里我选择了两条较为主要的线路进行说明,一条通往(6)APB1总线时钟HCLK1,另一条通往(7) APB2总线时钟HCLK2。