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时钟。
从(1)中经过选择出来的时钟信号,紧接着被传递到(2)部分中
2:第(2)部份PLLSRC,PLL输入时钟源选择。一是HSE就是上述第(1)部分过来的时钟。二是HSI/2. PLL通过时钟配置寄存器
RCC_CFGR的第16位PLLSRC来选择PLL时钟源的输入。
从(2)中经过选择出来的时钟信号,紧接着被传递到(3)部分中 PLLMUL
3:第(3)部份PLLMUL是设置PLL的倍频系数,最大输出不超过72M,最大16倍频。可通过RCC_CFGR的21:18来设置倍频系数。
我们PLL的时钟来源为HSE 8MHZ,经过倍频为72M=8M*9,72M是ST官方推荐的稳定运行时钟.
从(3)中经过选择出来的时钟信号,紧接着被传递到(4)部分中 SYSCLK
4:SYSCLK是系统时钟源选择。从图中我们可以看出SYSCLK的时钟来源可以是:HSI, PLLMUL,HSE,可以通过RCC_CFGR的1:0位来选择时钟源的输入。
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。