参考《STM32中文参考手册_V10》,研究CubeMX中有关时钟树配置。
一、系统时钟配置
三种不同的时钟源可被用于驱动系统时钟(SYSCLK):
- HSI振荡器时钟
- HSE振荡器时钟
- PLL时钟
时钟源选择对应时钟配置寄存器(RCC_CFGR)中的SW[1:0]位。
三种不同的时钟源可被用于驱动系统时钟
MCU中除了上述三种可用于驱动系统时钟的时钟源以外,还有2种二级时钟源:
- LSI:40kHz低速内部RC,可用于驱动独立看门狗和通过程序选择驱动RTC
- LSE:32.768kHz低速外部晶体也可用于通过程序选择驱动RTC
独立的二级时钟源
高速外部时钟信号(HSE)可由两种时钟源产生:HSE外部晶体/陶瓷谐振器;HSE用户外部时钟。这部分在前面介绍RCC时有涉及:
HSE时钟
HSI时钟信号由内部8MHz的RC振荡器产生,可以直接作为系统时钟或在2分频后作为PLL输入。HSI RC振荡器能够在不需要任何外部器件的条件下提供系统时钟,其启动时间比HSE晶体振荡器短,但时钟频率精度较差。
HSI时钟
内部PLL可以用于倍频HSI或HSE的输出时钟。PLL的设置包括:选择HSI振荡器除以2或HSE振荡器为PLL的输入时钟;选择倍频因子。
PLL的配置对应:时钟配置寄存器(RCC_CFGR)中的PLLMUL位(对PLL的分频系数进行配置)、时钟配置寄存器(RCC_CFGR)中的PLLXTPRE位(配置HSE作为PLL输入前是否分频)、时钟配置寄存器(RCC_CFGR)中的PLLSRC位(配置PLL输入时钟源(HSI的二分频信号或HSE))。
PLL
MCU允许输出时钟信号到外部MCO引脚(必须对相应引脚进行配置),以下4个时钟信号可以被选座MCO时钟:
- SYSCLK
- HSI
- HSE
- 除以2的PLL时钟
该部分的配置对应时钟配置寄存器(RCC_CFGR)中的MCO[2:0]位。
时钟输出
二、总线时钟配置
SYSCLK的频率确定后,需要进一步配置外设时钟。
对应AHB预分频通过时钟配置寄存器(RCC_CFGR)中的HPRE[3:0]位。
AHB预分频
APB1(低速APB预分频)配置对应时钟配置寄存器(RCC_CFGR)中的PPRE1[2:0]位。
APB2(高速APB预分频)配置对应时钟配置寄存器(RCC_CFGR)中的PPRE2[2:0]位。
APB1和APB2预分频
AHB、APB1、APB2是stm32的三条时钟总线,分别对应不同的外设,推荐参考:
ADC的时钟配置与其他外设独立,ADC预分频对应时钟配置寄存器(RCC_CFGR)中的ADCPRE1[1:0]位。
ADC预分频
三、小结
总体上,掌握两个步骤即可:1)配置SYSCLK;2)配置AHB、APB1、APB2。