下面是一个STM32芯片的时钟树图
1、LSI是低速内部时钟,RC振荡器,频率为32kHz左右。供独立看门狗和自动唤醒单元使用。
2、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。这个主要是RTC的时钟源。
3、HSE是高速外部时钟,课接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~26MHz。我们开发板接的是8M的晶振。HSE也可以直接作为系统时钟或者PLL输入。
4、HSI是高速内部时钟,RC振荡器,频率为16MHz。可以直接作为系统时钟或者用作PLL输入。
5、PLL为锁相环倍频输出。STM32F4有两个PLL:
(1)主PLL由HSE或者HSI提供时钟信号,并具有两个不同的输出时钟。
第一个输出PLLP用于生成高速的系统时钟(最高168MHz)
第二个输出PLLQ用于生成USB OTG FS的时钟(48MHz),随机数发生器的时钟和SDIO时钟。
(2)专用PLL(PLLI2S)用于生成精确时钟,从而在I2S借口实现高品质音频性能。
大家在图中可以看到一些梯形,这些梯形为选择器。左边为选择器,右边为分频器
LSI,低速内部时钟
LSI低速内部时钟,频率为32kHz。RC振荡器产生,因为是RC振荡器产生,所以频率不是很稳定。主要对右边的独立看门狗做时钟。因为独立看门狗对时钟的精度要求不是很高,所以可以使用LSI。LSI比较简单,简单的理解就是一个电阻一个电容。
LSI还可以作为RTC模块的时钟来源。在RTC模块左边有一个选择器,那么它不仅可以选择LSI作为时钟来源,还可以选择LSE作为时钟来源。
LSE,低速外部时钟
LSE一般是由外接的一个精确的32.768k的晶振产生,比较稳定,一般情况下RTC选择LSE作为时钟源。RTC的时钟来源还可以来自HSE(图上有线连着,顺着线找)。
MCO1/MCO2
在LSE下面有MCO1和MCO2两个引脚,这两个引脚就是把芯片内部的时钟输出到引脚。MCO1对应的是PA8,MCO2对应的是PC9(笔者这里使用的STM32F407芯片),MCO1和MCO2都有一个选择器,可以选择四个时钟来源,选择好时钟来源后经过一个分频器,分频就是对时钟进行除法运算,然后再输出到对应的引脚。
HSE,高速外部时钟
HSE是由外接的晶振产生的,是4MHz26MHz。HSE产生时钟后会先经过一个分频器,这个分频系数是231,分频后的时钟才可以作为RTC时钟的一个选择。
HSI,高速内部时钟
由RC振荡器产生,精度不高。首先,可以作为MCO1的一个时钟来源,其次可以作为系统时钟的一个来源。向下会将时钟信号送给一个选择器,这个选择器可以选择来自HSE和HSI的信号。左边一个“/M”的分频器,会把选择的时钟/M之后产生一个频率,产生一个频率后就到了PLL。
PLL,锁相环倍频输出
上面的叫主PLL,下面的叫专用PLL。主PLL产生两种时钟,一种作为系统时钟;一种叫作PLL48CK的时钟,用于USB OTG的时钟。专用PLL时钟主要是给I2S模块使用,因为I2S主要处理音频问题,对于频率的要求比较高,所以就有一个专用PLL。时钟信号从“/M”分频器出来后,进入“xN”的倍频器,然后在“/P”、“/Q”或者“/R”,“/P”出来后作为系统时钟;“/Q”出来后作为PLL48CK时钟;“/Q”出来后作为I2S时钟。从这里我们就能计算出从PLL出来的时钟频率,假设从选择器进去的时钟频率为f,PLL=(f/M)(N/P)或者PLL=(f/M)(N/Q)或者PLL=(f/M)*(N/R)。
图中AG表示的地方:31。
A: 这里是看门狗时钟输入。从图中可以看出,看门狗时钟源之恩给你是低速的LSI时钟。
B: 这里是RTC时钟源,从图上可以看出,RTC的时钟源可以选择LSI,LSE,以及HSE分频后的时钟,HSE分频系数为2
C: 这里是STM32F4输出时钟MCO1和MCO2。MCO1是芯片的。PA8引脚输出时钟。它有四个时钟来源分别为:HSI,LSE,HSE和PLL时钟。MCO2是向芯片的PC9输出时钟,它同样有四个时钟来源分别为:HSE,PLL,SYSCLK以及PLLI2S时钟MCO输出时钟频率最大不超过100MHz。
D: 这里我们值得是以太网PTP时钟,AHB时钟,APB2高速时钟,APB1低速时钟。这些时钟都是来源与SYSCLK系统时钟。其中以太网PTP时钟是使用系统时钟。最大时钟为168MHz,APB2高速时钟最大频率为84MHz,而APB1低速时钟最大频率为42MHz。
F: 这里是指I2S时钟源。从图可以看出,I2S的时钟源来源于PLLI2S或者映射到I2S_CKIN引脚的外部时钟。I2S出于音质的考虑,对时钟精度要求很高。
G: 这是STM32F4内部以太网MAC时钟的来源。对于MII接口来说,必须向外部PHY芯片提供25MHz的时钟,这个时钟,可以由PHY芯片外接晶振,或者使用STM32F4的MCO输出来提供。然后,PHY芯片再给STM32F4提供ETH_MII_TX_CLK和ETH_MII_RX_CLK时钟。对于RMII接口来说,外部必须提供50MHz的时钟驱动PHY和STM32F4的ETH_RMII_REF_CLK,这个50MHz时钟可以来自PHY、有源晶振或者STM32F4的MCO。我们的开发板使用的是RMII接口,使用PHY芯片提供50MHz时钟驱动STM32F4的ETH_RMII_REF_CLK.
H: 这里是指外部PHY提供的USB OTG HS (60MHz)时钟。
本文图片来STM32F4开发指南,部分内容参考STM32F4开发指南。如有不妥,还请各位多多指出。