时钟系统概述
定义
时钟系统,它是由振荡器(信号源)、定时唤醒器、分频器等组成的电路。
常用的信号源有晶体振荡器和RC振荡器。
功能
时钟是嵌入式系统的脉搏,处理器内核在时钟驱动下完成指令执行,状态变换等动作;
外设部件在时钟的驱动下完成各种工作,比如串口数据的发送、A/D转换、定时器计数等。
SMT32L4中有多个时钟源,原因如下:
- STM32本身非常复杂,外设非常多;
- 并不是所有的外设都需要系统时钟这么高的频率,比如看门狗以及RTC只需要几十k的时钟即可;
- 同一个电路,时钟越快功耗越大,同时抗电磁干扰能力也会越弱,所以对于较复杂的MCU一般采用多时钟源的方法来解决这个问题。
时钟系统图
时钟源分析
如上图所示,STM32L4中,有6重要的时钟源,为HSI、HSE、LSI、LSE、MSI、PLL,其中PLL实际分为三个时钟源,分别为主PLL、PLLISAI1和PLLSAI2。
从时钟频率来分可以分为高速时钟源和低速时钟源;从时钟频率来分可以分为高速时钟源和低速时钟源;从来源可分为外部时钟源和内部时钟源,外部时钟源就是从外部通过接晶振的方式获取时钟源。
- LSI 是低速内部时钟,** RC 振荡器**,频率为 32kHz 左右。供独立看门狗、 RTC 和 LCD使用。
- LSE 是低速外部时钟,接频率为 32.768kHz 的石英晶体。这个主要是 RTC 的时钟源。
- HSE 是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz-48MHz。我们的开发板接的是 8MHz 的晶振。 HSE 也可以直接做为系统时钟或者 PLL 输入。
- HSI 是高速内部时钟,** RC 振荡器**, 频率为 16MHz。可以直接作为系统时钟或者用作PLL 输入。
- MSI 时钟信号由内部 RC 振荡器产生。其频率范围可通过时钟控制寄存器(RCC_CR)中的 MSIRANGE[3:0]位进行调整。
- PLL 为锁相环倍频输出。STM32L4有三个PLL:
- 主 PLL(PLL)可由 HSE、 HIS 或者 MSI 提供时钟信号,并具有三个不同的输出时钟:
** 1) 输出PLLR**,用于生成高速的系统始终(SYSTEM,最高80MHz);
** 2)输出PLLQ**,可为USB、RNG和SDMMC提供时钟源;
** 3)输出PLLP**,可用于SAI1和SAI2时钟。 - PLLSAI1 用于生成精确时钟,同样具有三个不同的输出时钟。
** 1) 输出 PLLSAI1P**,可用于 SAI1 和 SAI2 时钟;
** 2)输出 PLLSAI1Q**,可为USB、RNG和SDMMC提供时钟源;
** 3)输出 PLLSAI1R**,可为 ADC 提供时钟。 - PLLSAI2 用于生成精确时钟,具有两个不同的输出时钟。
** 1) 输出 PLLSAI2P**,可用于 SAI1 和 SAI2 时钟;
** 2)输出 PLLSAI2R**,可为 ADC 提供时钟;
主PLL时钟图如下:
从图中可以看出,主 PLL 的时钟源要先经过一个分频系数为 M 的分频器,然后经过倍频
系数为 N 的倍频器,出来之后还需要经过分频系数为 R(输出 PLLR 时钟)、或者 P(输出 PLLP
时钟)、或者 Q(输出 PLLQ 时钟),最后才生成最终的主 PLL 时钟。
- 主 PLL(PLL)可由 HSE、 HIS 或者 MSI 提供时钟信号,并具有三个不同的输出时钟: