一、时钟频率与周期
1 秒钟里总的变化次数称为时钟频率单位是 Hz, 每变换一次高低 电平所用的时间称为一个周期, 它是频率的倒数
二、基础时钟源
2.1 三种振荡器
2.1.1 RC振荡器
-
优点:成本低、启动速度快
-
缺点:精度低(不如晶振和陶瓷谐振器)
-
总结:便宜、快、但不准
2.1.2 无源晶体振荡器
-
工作原理:利用压电效应和共振原理,自身无法起振,需要借助外部时钟电路才能产生振荡信号
-
总结:自己振不起来,需要外面帮一把(需要匹配电容和芯片内部振荡电路)
2.1.3 有源晶体振荡器
-
工作原理:内部已集成完整的振荡电路,原理与无源晶振类似,但需要外部电源供电才能起振
-
总结:自己就是完整振荡器,通电就能用,不需要外部匹配电路
2.1.4 对比表格
| 类型 | 是否需要外部电路 | 是否需要电源 | 精度 | 成本 | 启动速度 |
|---|---|---|---|---|---|
| RC振荡器 | 不需要 | 需要 | 低 | 低 | 快 |
| 无源晶体 | 需要(匹配电容+芯片内部电路) | 不需要单独供电 | 高 | 中 | 中 |
| 有源晶体 | 不需要(内部完整) | 需要单独供电 | 高 | 高 | 中 |
2.2 四种时钟源
2.2.1 HSI(内部高速时钟)
| 项目 | 说明 |
|---|---|
| 来源 | 内部 16MHz RC 振荡器 |
| 用途 | 直接做系统时钟,或作为 PLL 输入 |
| 优点 | 成本低(无需外部元件)、启动速度快 |
| 缺点 | 精度不如外部晶振(即使校准后) |
2.2.2 HSE(外部高速时钟)
| 项目 | 说明 |
|---|---|
| 来源 | 外部有源晶振或无源晶振(4~26MHz) |
| 用途 | 直接做系统时钟,或作为 PLL 输入 |
| 优点 | 精度高 |
| 缺点 | 需要外部元件,成本高,启动慢 |
2.2.3 LSI(内部低速时钟)
| 项目 | 说明 |
|---|---|
| 来源 | 内部 RC 振荡器,约 32kHz |
| 用途 | 独立看门狗(IWDG)、RTC(低精度场景) |
| 特点 | 功耗极低,可在停机和待机模式下保持运行 |
| 缺点 | 精度差,频率随温度波动 |
2.2.4 LSE(外部低速时钟)
| 项目 | 说明 |
|---|---|
| 来源 | 外部 32.768kHz 晶振或陶瓷谐振器 |
| 用途 | RTC(实时时钟/日历)、其他定时功能 |
| 优点 | 功耗低、精度高 |
| 缺点 | 需要外部晶振 |
2.2.5 总对比表
| 时钟 | 英文全称 | 类型 | 频率 | 主要用途 | 一句话 |
|---|---|---|---|---|---|
| HSI | High-Speed Internal | 内部高速 | 16MHz | 系统时钟 / PLL输入 | 自带,快但不准 |
| HSE | High-Speed External | 外部高速 | 4~26MHz | 系统时钟 / PLL输入 | 外接,准但启动慢 |
| LSI | Low-Speed Internal | 内部低速 | ~32kHz | 看门狗 / 低精度RTC | 自带低速,省电但不准 |
| LSE | Low-Speed External | 外部低速 | 32.768kHz | 高精度RTC | 外接晶振,准又省电 |
三、系统时钟
3.1 PLL锁相环
3.1.1 PLL 含义
PLL(Phase-Locked Loop,锁相环)是一个倍频器 ,可以把输入的较低频率时钟(HSI或HSE)倍频到更高频率,从而得到系统时钟(SYSCLK)。
3.1.2 PLL 工作原理
HSI (16MHz) 或 ──→ PLLM ──→ PLLN ──→ PLLP ──→ SYSCLK(系统时钟)
HSE (4-26MHz) (分频) (倍频) (分频) (最高168MHz)
│
└──→ PLLQ(USB/SDIO等外设时钟)
3.1.3 PLL 相关参数(可编程因子)
| 参数 | 全称 | 作用 |
|---|---|---|
| PLLM | 分频因子 | 将输入时钟分频(降低频率)后再送入PLL |
| PLLN | 倍频因子 | 在PLL内部倍频(放大频率) |
| PLLP | 主系统时钟分频因子 | PLL输出后分频得到SYSCLK |
| PLLQ | USB/SDIO分频因子 | 输出分频后给USB、SDIO等外设用 |
为了在输入时钟频率固定的情况下,通过"先分频、再倍频、再分频"的组合,灵活得到系统所需的各种不同频率(如CPU高速、USB固定、总线低速),而这些比例通常用整数公式就能算出来。
3.1.4 存在意义
输入晶振的振荡频率越高,价格越贵;
输入晶振的振荡频率越高,精度会有衰减
所以只能先输入一个相对高的时钟频率,然后进行分频和倍频输出给系统时钟
3.2 SYSCLK(系统时钟)
3.2.1 SYSCLK含义
SYSCLK 是系统时钟,也就是 CPU、内存、总线(AHB/APB)等核心部件的工作时钟,决定了处理器执行指令的速度。
3.2.2 SYSCLK 的来源选择
SYSCLK 通过 System Clock Mux(系统时钟选择器) 从以下三种时钟源中选取一个:
| 输入源 | 类型 | 典型频率 | 说明 |
|---|---|---|---|
| HSI | 内部高速 RC | 16MHz | 上电默认,启动快但不准 |
| HSE | 外部高速晶振 | 4~26MHz | 精度高,需要外接晶振 |
| PLLCLK | PLL 倍频输出 | 可达 168MHz | PLL 对 HSI 或 HSE 倍频后得到,频率最高 |
3.3 HCLK(AHB 总线时钟)
3.3.1 HCLK含义
HCLK (High-speed Clock )是 AHB (Advanced High-performance Bus先进高性能总线 )总线时钟 ,由 SYSCLK(系统时钟)经过 AHB Prescaler(AHB预分频器) 分频后得到,为 AHB 总线上的高速外设提供时钟。
3.3.2 时钟路径
SYSCLK(系统时钟)
│
↓
AHB Prescaler(分频器)
│
↓
HCLK(AHB总线时钟,最大168MHz)
分频器把系统时钟分配成不同的时钟域,然后输出给不同的模块使用(不同模块的最大时钟频率不一样)
3.3.3 HCLK 提供时钟的模块
| 模块 | 英文名称 | 说明 |
|---|---|---|
| DMA | Direct Memory Access | 直接存储器访问,高速数据传输 |
| Cortex System Timer | SysTick | 系统滴答定时器,常用于操作系统心跳 |
| FCLK | Free-Running Clock | 处理器自由运行时钟,休眠时仍保持运行 |
| APB1 | Advanced Peripheral Bus 1 | 低速外设总线,最大42MHz |
| APB2 | Advanced Peripheral Bus 2 | 高速外设总线,最大84MHz |
| PTP | Precision Time Protocol | 精确时间协议,用于网络时钟同步(以太网IEEE 1588) |
四、外设时钟
4.1 APB 总线时钟
4.1.1 APB 总线时钟含义
APB(Advanced Peripheral Bus,先进外设总线)是 STM32 中用于连接各种外设 的总线,分为 APB1 和 APB2 两条。
4.1.2 时钟来源路径
SYSCLK → HCLK(AHB总线时钟)→ APB Prescaler(分频器)→ APB1 / APB2 外设时钟
-
输入源:HCLK(AHB 总线时钟)
-
经过:APB Prescaler(APB预分频器)分频
-
得到:APB1 和 APB2 的外设时钟
4.1.3 APB1 与 APB2 对比
| 总线 | 最大频率 | 典型外设 |
|---|---|---|
| APB1 | 42MHz(HCLK/2、/4等) | USART2/3/4/5、I2C1/2/3、SPI2/3、CAN、DAC、PWR、RTC等 |
| APB2 | 84MHz(HCLK/1、/2等) | USART1、SPI1、ADC1/2/3、TIM1/8/9/10/11、GPIO、SYSCFG、EXTI等 |
4.1.4 APB2与APB1运用场景
-
APB2 接的是高速外设(如 ADC、高级定时器、SPI1),需要更高的时钟频率来满足性能要求
-
APB1 接的是低速外设(如 I2C、普通串口、DAC),不需要太快,且为了降低功耗
4.2 外设控制器时钟
4.2.1 外设时钟来源
| 总线 | 最大频率 | 一句话作用 | 典型外设 |
|---|---|---|---|
| AHB | 168MHz | 给高速核心模块提供时钟 | DMA、GPIO、CRC、Flash、SRAM |
| APB1 | 42MHz | 给低速外设提供时钟 | USART2/3/4/5、I2C1/2/3、SPI2/3、CAN、DAC、PWR |
| APB2 | 84MHz | 给高速外设提供时钟 | USART1、SPI1、ADC1/2/3、TIM1/8/9/10/11、SYSCFG |
外设用哪条总线,就由哪条总线的时钟驱动,各总线频率不同,满足不同外设的速度需求。
当 APB1 预分频器分频系数 APB1大于 1 时,定时器时钟会自动 乘以 2 ,让定时器获得比总线更高的时钟,以提高 PWM 精度和计时分辨率。
4.2.2 一条总线上挂多个外设的含义
-
同一条总线上的外设共享同一个时钟源
-
如果该总线的时钟被关闭,上面挂载的所有外设都会停止工作
-
每个外设可以独立控制自己的时钟使能(在RCC寄存器中配置)
4.3 RTC 时钟源
RTC(实时时钟)的输入时钟可以由以下三种来源提供,通过 RTC Clock Mux(RTC时钟选择器) 选择:
| 时钟源 | 类型 | 典型频率 | 说明 |
|---|---|---|---|
| LSE | 外部低速晶振 | 32.768kHz | 精度高,功耗低,RTC首选 |
| LSI | 内部低速RC | ~32kHz | 精度低,省电但不准 |
| HSE(分频后) | 外部高速晶振 | 4~26MHz(分频后得到1MHz以内) | 需要外接晶振,分频后给RTC用 |
4.4 IWDG(独立看门狗)时钟源
| 时钟源 | 类型 | 典型频率 | 说明 |
|---|---|---|---|
| LSI | 内部低速RC | ~32kHz | 唯一来源,没有其他选择 |
五、时钟输出
5.1 MCO含义
MCO(Microcontroller Clock Output,微控制器时钟输出)是STM32的一个引脚功能,可以向外输出芯片内部的时钟信号 ,相当于一个可编程的有源晶振。
5.2 STM32F407 的 MCO 引脚
| 引脚 | 名称 | 说明 |
|---|---|---|
| PA8 | MCO1 | 第一个时钟输出引脚 |
| PC9 | MCO2 | 第二个时钟输出引脚 |
5.3 主要作用
-
给外部电路提供时钟信号(如给另一颗芯片提供时钟,节省外部晶振)
-
调试时测量内部时钟频率(如检查HSE、HSI、PLL是否正常工作)
5.4 MCO 可以输出的时钟源
| MCO引脚 | 可选输出的时钟源 |
|---|---|
| MCO1(PA8) | HSI、HSE、PLLCLK/2、LSE、LSI |
| MCO2(PC9) | SYSCLK、PLLI2S、HSE、PLLCLK |