时钟就是具有周期性的脉冲信号,相当于单片机的心脏,给单片机提供一个统一的信号,要想使用单片机的外设必须开启相应的时钟。
STM32有四个时钟源
HSE(高速外部时钟) 8MHZ的外部晶振
LSE(低速外部时钟)
HSI(高速内部时钟) 内部的时钟不稳定,没有独立的晶振源
LSI(低速内部时钟)
时钟树
① LSI(Low Speed Internal Clock, 低速内部时钟):RC振荡器,频率为32KHz。独立看门狗的时钟源只能是LSI,同时LSI还可以做RTC的时钟源。
② LSE(Low Speed External Clock, 低速外部时钟):接频率为32.768KHz的石英晶体,LSE主要是RTC的时钟源。
③ HSI(High Speed Internal Clock, 高速内部时钟):RC振荡器,频率为16MHz,精度不高
④ HSE(High Speed External Clock, 高速外部时钟):可接石英/陶瓷谐振器,或外接时钟源,频率范围是2MHz~26MHz。(STM32F407ZGT6开发板用的是一个8Mhz的晶振),当HSE 故障时,高速的内部时钟信号HSI会作为备用的系统时钟,直到HSE恢复正常。
⑤ PLL(Phase Locked Loop, 锁相环倍频输出):理论上不能算是时钟源,只是接收时钟源后对其进行分/倍频,分/倍频倍数可修改参数调节。(我们的开发板最大可输出168Mhz)
③④⑤ 是来驱动系统时钟 (SYSCLK)的。
锁相环PLL
PLL 的主要作用是对时钟进行倍频,然后把时钟输出到各个功能部件,由HSE 或者HSI 提供时钟输入信号。
主PLL 有两路的时钟输出,第一个输出时钟PLLCLK 用于系统时钟,F407 里面最高是168M。
第二个输出用于USB OTG FS 的时钟(48M)、RNG 和SDIO 时钟(<=48M)。
专用的PLLI2S 用于生成精确时钟,给I2S 提供时钟。
PLLCLK的计算公式为:
VCOCLK_IN = PLLCLK_IN / M 2
VCOCLK_OUT = VCOCLK_IN * N 42
PLLCLK_OUT=VCOCLK_OUT /P 1
系统时钟SYSCLK=PLLCLK=((HSE / M)*N)/ P (最高168 MHz)
如果系统时钟是由HSE 经过PLL 倍频之后的PLLCLK 得到,当HSE 出现故障的时候,系统时钟会切换为HSI=16M,直到HSE 恢复正常为止。
调节 CPU 的运行频率,来控制系统的性能与功耗。比较典型的例子就是说手机/笔记本电脑都有高性能模式、平衡模式、低性能模式。
GPIO时钟使能 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
USART时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
main函数没有调用,修改时钟的操作是在main函数之前执行的SystemInit()函数设置的
- 修改主频到168Mhz
- 超频和降频
独立看门狗时钟由内部的低速时钟LSI 提供,大小为32KHZ。
I2S 时钟可由外部的时钟引脚I2S_CKIN 输入,也可由专用的PLLI2SCLK 提供,具体的由RCC 时钟配置寄存器(RCC_CFGR) 的I2SSCR 位配置