STM32时钟树
1、认识时钟树
H:high 高
L:low 低
S:speed 速度
I:internal 内部
E:external 外部
HSE就是高速外部时钟源 HSI就是告诉内部时钟源
外部时钟一般需要接一个时钟源,也就是晶振,这个需要外接,增加一定的成本,但是更加稳定,比内部时钟稳定精确
2、HSE和HSI
HSE高速外部时钟源、HSI高速内部时钟源,为什么会有两个,有了HSI高速内部时钟源,为什么还需要HSE高速外部时钟源,这两个都接8M的晶振
首先HSE和HSI出来以后先分频,HSI只有2分频后面PLL最高可以16倍频,这样就是8/216 = 64MHz,这样HSI最高才64MHz,而HSE呢,有1分频和2倍频,也就是8M27 = 72MHz或者81*9=72MHz,这样可以达到最高的系统时钟72MHz,所以想要用到72MHz的频率,就一定要使用HSE
HCLK就是AHB(告诉高性能总线)
SYSCLK和HCLK之间的分频系数一般设置1,这样就能使用72MHz
从HCLK的时钟就会供给内核、外设、还有APB1和APB2,然后APB1后面最高只能提供36MHz
3、整体的系统时钟树
4、时钟配置函数或宏
1、时钟源、锁相环:HAL_RCC_OscConfig()
这个函数就是设置时钟源选择(HSE、HSI、LSI、LSE)以及锁相环倍频的,比如选择HSE,然后选择PLL倍频最后得到72MHz
2、系统时钟、总线:HAL_RCC_ClockConfig()
这个就是系统时钟SYSCLK选择前面三个哪种频率、以及对后面总线提供时钟频率
3、使能外设时钟的宏:__HAL_RCC_PPP_CLK_ENABLE()
STM32为了低功耗,一开始是关闭了所有的外设的时钟,所以外设想要工作,首先就要打开时钟,所以后面在使用外设的时候必须先用这个宏打开相应的时钟,比如打开GPIOA、ADC等外设的时钟
4、扩展外设时钟(RTC/ADC/USB):HAL_RCCEx_PeriphCLKConfig()
5、RTC时钟源选择
外部接了LSE就优先选择,外部没有就选择HSE进行128分频,最后再选择LSI,因为这个内部时钟不太稳定,不精确
6、IWDG看门狗的时钟源选择
由于看门狗的精度要求不高,只能选择LSI
7、时钟输出
MCO就是一个引脚PA8,进行时钟输出
7、STM32CubeMX时钟树配置
对于APB1外设只能用36MHz,而APB1的定时器可以通过2倍频使用72MHz