众所周知,时钟系统是 CPU 的脉搏,就像人的心跳一样。所以时钟系统的重要性就不言而喻了。 STM32F4 的时钟系统比较复杂,不像简单的 51 单片机一个系统时钟就可以解决一切。于是有人要问,采用一个系统时钟不是很简单吗?为什么 STM32 要有多个时钟源呢? 因为首先 STM32 本身非常复杂,外设非常的多,但是并不是所有外设都需要系统时钟这么高的频率,比如看门狗以及 RTC 只需要几十 k 的时钟即可。同一个电路,时钟越快功耗越大,同时抗电磁干扰能力也会越弱,所以对于较为复杂的 MCU 一般都是采取多时钟源的方法来解决这些问题。 三种不同的时钟源可被用来驱动系统时钟(SYSCLK) HSI 振荡器时钟 HSE 振荡器时钟 PLL 时钟 这些设备有以下两种二级时钟源: 32kHz 低速内部 RC,可以用于驱动独立看门狗和通过程序选择驱动 RTC。RTC 用于从停机/待机模式下自动唤醒系统。 32.768kHz 低速外部晶体也可用来通过程序选择驱动 RTC(RTCCLK)。 由时钟控制器的时钟树可以看出,STM32F4 在应用中可以选择外部晶体或者内部 RC 振荡器来驱动内核和外设,像以太网,USB,I2S 和 SDIO 需要专用时钟。AHB 总线最高支持 168MHz 的时钟,通过 AHB 总线分频,APB2 最高支持 84MHz,APB1 最高支持 42MHz。 所有的外设驱动全部来自 SYSCLK 除了下面几个: USB OTG FS 的时钟(48MHz)、随机信号发生器时钟(《=48MHz)和 SDIO 时钟(《=48MHz)全部来自 PLL48CLK。 I2S 时钟,为了达到高性能的要求,I2S 时钟可以用内部时钟 PLLI2S 或者使用外部时钟,通过I2S_CLKIN 引脚输入得到。 USB OTG HS(60MHz)需要外部 PHY 芯片提供。 以太网时钟(TX,RX 和 RMII)也需要外部 PHY 芯片提供时钟。 RCC 通过 AHB 时钟(HCLK)8 分频后作为 Cortex 系统定时器(Systick)的外部时钟。通过对 SysTick控制与状态寄存器的设置,可选择上述时钟或 Cortex(HCLK)时钟作为 SysTick 时钟。定时器时钟频率分配由硬件按以下 2 种情况自动设置: 如果相应的 APB 预分频系数是 1,定时器的时钟频率与所在 APB 总线频率一致。 否则,定时器的时钟频率被设为与其相连的 APB 总线频率的 2 倍。 这里定时器的基础时钟频率一定要注意
|