参考《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时有涉及:
尝试使用CubeMX做stm32开发之八:RCC配置_Forster-C的博客-CSDN博客参考《STM32中文参考手册_V10》,研究CubeMX中有关RCC的配置。通过CubeMX配置时钟树,可以较大地简化程序开发过程,尤其是在“Clock Configuration”中,通过图形化方法,可以很方便地对stm32的时钟树进行设置,还是很好用的。https://ccszz.blog.csdn.net/article/details/128189721?spm=1001.2014.3001.5502
HSI时钟信号由内部8MHz的RC振荡器产生,可以直接作为系统时钟或在2分频后作为PLL输入。HSI RC振荡器能够在不需要任何外部器件的条件下提供系统时钟,其启动时间比HSE晶体振荡器短,但时钟频率精度较差。
内部PLL可以用于倍频HSI或HSE的输出时钟。PLL的设置包括:选择HSI振荡器除以2或HSE振荡器为PLL的输入时钟;选择倍频因子。
PLL的配置对应:时钟配置寄存器(RCC_CFGR)中的PLLMUL位(对PLL的分频系数进行配置)、时钟配置寄存器(RCC_CFGR)中的PLLXTPRE位(配置HSE作为PLL输入前是否分频)、时钟配置寄存器(RCC_CFGR)中的PLLSRC位(配置PLL输入时钟源(HSI的二分频信号或HSE))。
MCU允许输出时钟信号到外部MCO引脚(必须对相应引脚进行配置),以下4个时钟信号可以被选座MCO时钟:
- SYSCLK
- HSI
- HSE
- 除以2的PLL时钟
该部分的配置对应时钟配置寄存器(RCC_CFGR)中的MCO[2:0]位。
二、总线时钟配置
SYSCLK的频率确定后,需要进一步配置外设时钟。
对应AHB预分频通过时钟配置寄存器(RCC_CFGR)中的HPRE[3:0]位。
APB1(低速APB预分频)配置对应时钟配置寄存器(RCC_CFGR)中的PPRE1[2:0]位。
APB2(高速APB预分频)配置对应时钟配置寄存器(RCC_CFGR)中的PPRE2[2:0]位。
AHB、APB1、APB2是stm32的三条时钟总线,分别对应不同的外设,推荐参考:
STM32三条时钟总线(AHB、APB1、APB2)的外设情况_Jack_Sarah的博客-CSDN博客_ahb总线时钟网上整理的,三条时钟总线上挂的外设简单列举如下:1、AHB总线:(1)Flash 存储器;(2)DMA;(3)复位和时钟控制;(4)CRC;(5)以太网;(6)SDIO;2、APB2总线:(1)USART1;(2)高级控制定时器TIM1和TIM8;(3)模数转换器ADC1、ADC2、ADC3;(4)SPI1;(5)外部中断EXTI;(6)复用IO,AFIO;(7)通用IO:GPIOA~G;3、APB1总线:(1)定时器TIM2到TIM7;https://blog.csdn.net/Jack_Sarah/article/details/109105347?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167039883316782414974079%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167039883316782414974079&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-109105347-null-null.142%5Ev68%5Econtrol,201%5Ev4%5Eadd_ask,213%5Ev2%5Et3_control1&utm_term=stm32apb1apb2%E4%B8%8B%E7%9A%84%E5%A4%96%E8%AE%BE&spm=1018.2226.3001.4187ADC的时钟配置与其他外设独立,ADC预分频对应时钟配置寄存器(RCC_CFGR)中的ADCPRE1[1:0]位。
三、小结
总体上,掌握两个步骤即可:1)配置SYSCLK;2)配置AHB、APB1、APB2。