STM32的时钟系统比较复杂,不像51单片机一个系统时钟就可以解决一切。也许你会问,为什么不采用统一的时钟,这样不是更简单吗?这是因为STM32的外设比较多,对不同外设而言,所需要的时钟是不一样的,而且,对同一个电路,时钟越快功耗越大,抗电磁干扰的能力也会减弱,因此现在较为复杂的MCU一般都是采用多时钟的方法来解决这些问题。
STM32的时钟树图一般在网上都能找的到,因为占据版面位置较大,这里就不放出来了。
在 STM32F4 中,有 5 个最重要的时钟源,为 HSI、 HSE、 LSI、 LSE、 PLL。 其中 PLL 分为两个时钟源,分别为主 PLL 和专用 PLL。 从时钟频率来分可以分为高速时钟源和低速
时钟源,在这 5 个中 HSI, HSE 以及 PLL 是高速时钟, LSI 和 LSE 是低速时钟。从来源可分为外部时钟源和内部时钟源,外部时钟源就是从外部通过接晶振的方式获取时钟源,其中 HSE 和
LSE 是外部时钟源,其他的是内部时钟源。
①、 LSI 是低速内部时钟, 由内部RC 振荡器产生,频率为 32kHz 左右,对精确度的要求较低。供独立看门狗和自动唤醒单元使用。
②、 LSE 是低速外部时钟,由外接频率为 32.768kHz 的石英晶体产生,相对精度较高。 主要是 RTC 的时钟源。
③、HSE 是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为 4MHz~26MHz。 HSE 也可以直接做为系统时钟或者 PLL 输入。
④、 HSI 是高速内部时钟, RC 振荡器, 频率为 16MHz。 可以直接作为系统时钟或者用作 PLL输入。
⑤、 PLL 为锁相环倍频输出。 STM32F4 有两个 PLL:
1) 主 PLL(PLL)由 HSE 或者 HSI 提供时钟信号,并具有两个不同的输出时钟。
第一个输出 PLLP 用于生成高速的系统时钟(最高 168MHz)
第二个输出 PLLQ 用于生成 USB OTG FS 的时钟( 48MHz),随机数发生器的时钟和 SDIO
时钟。
2) 专用 PLL(PLLI2S)用于生成精确时钟,从而在 I2S 接口实现高品质音频性能。
这里需要对主PLL的时钟频率做一点补充,主 PLL 时钟的时钟源要先经过一个分频系数为 M 的分频器,然后经过倍频系数为 N 的倍频器出来之后的时候还需要经过一个分频系数为 P(第一个输出 PLLP)或者 Q(第二个输出 PLLQ)的分频器分频之后,最后才生成最终的主 PLL 时钟。 因此,最后频率应为