这篇文章介绍 STM32 的时钟系统。
首先,我们需要回答一个基础的问题:
“为什么在GPIO初始化的时候,都要先打开时钟?每次使用外设之前,都要先初始化它的时钟呢?”
一、五种主时钟源
单片机是一种集成了微处理器、内存、外设接口等功能的芯片,属于微控制器(MCU),能独立完成某项控制任务。单片机无论是外设还是内核,它的运行都是完全依赖时钟的,而且在STM32当中,时钟有很多个时钟源(其主时钟源一共有五个):
1. HSI、HSE、LSI、LSE、PLL。
时钟源 | 类型 | 频率 | 特点 | 常见用途 |
---|---|---|---|---|
HSI | 内部 | 8 MHz | RC 振荡器,精度差,但启动快 | 默认启动时钟 |
HSE | 外部 | 4~16 MHz | 需外部晶体或外部时钟信号 | |
LSI | 内部 | ~40 kHz | RC 振荡,低功耗,精度差 看门狗、低功耗唤醒 | |
LSE | 外部 | 32.768 kHz | 晶体振荡器,精度高 | RTC(实时时钟) |
PLL | 合成 | 2~72 MHz | 倍频器,输入源为 HSI/2、HSE、HSE/2 | 提供主频率 SYSCLK |
①、HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。
②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
③、LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。WDG
④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。RTC
⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。
倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。
2. 系统时钟SYSCLK可来源于三个时钟源:
①、HSI振荡器时钟
②、HSE振荡器时钟
③、PLL时钟
3.STM32可以选择一个时钟信号输出到MCO脚(PA8)上,可以选择为PLL输出的2分频、HSI、HSE、或者系统时钟。
4.任何一个外设在使用之前,【必须首先使能其相应的时钟】。
几个重要的时钟:
SYSCLK(系统时钟) :
AHB总线时钟
APB1总线时钟(低速): 速度最高36MHz
APB2总线时钟(高速): 速度最高72MHz
PLL时钟
参考资料:
http://www.openedv.com/posts/list/302.htm
二、RCC相关配置寄存器
typedef struct
{
__IO uint32_t CR; //HSI,HSE,CSS,PLL等的