目录
[1. 为什么单片机需要时钟?](#1. 为什么单片机需要时钟?)
[2. 时钟从哪里来?](#2. 时钟从哪里来?)
[(3)LSE / LSI](#(3)LSE / LSI)
[3. PLL 是干什么的?](#3. PLL 是干什么的?)
[4. STM32 时钟树的大结构](#4. STM32 时钟树的大结构)
[HCLK AHB 总线时钟。](#HCLK AHB 总线时钟。)
[PCLK APB 外设时钟。](#PCLK APB 外设时钟。)
在 STM32 裸机开发里,时钟树(Clock Tree)是非常核心的一部分。很多初学者刚看到 STM32 的时钟树图会觉得像"电路迷宫",但你只要抓住几个核心概念,就会发现它其实是在解决一个问题:
给 CPU 和各种外设分配合适频率的时钟。
STM32 的时钟系统由 RCC(Reset and Clock Control,复位和时钟控制器)管理,不同系列的 STM32 时钟树细节不同,但整体思想类似。
1. 为什么单片机需要时钟?
你可以把时钟理解成 MCU 的"心跳"。
CPU 执行:
a = b + c;
实际上需要很多个晶振脉冲:
时钟 ↑
CPU 执行一步
时钟 ↑
CPU 执行下一步
没有时钟:
- CPU 不运行
- 定时器不计数
- UART 不发送
- SPI/I2C 不通信
所以 STM32 上电第一件重要的事情之一就是配置时钟。
2. 时钟从哪里来?
STM32 一般有几个时钟源:
(1)HSI:高速内部时钟
High Speed Internal
例如:
HSI = 8MHz / 16MHz
来自芯片内部 RC 振荡器。
优点:
- 不需要外部晶振
- 上电即可使用
缺点:
- 精度较差
(2)HSE:高速外部时钟
High Speed External
就是开发板上的晶振:
比如:
8MHz 晶振
外部:
晶振
|
HSE
|
STM32
优点:
- 精度高
常用于:
- 串口精确波特率
- USB
- 高精度应用
(3)LSE / LSI
低速时钟:
LSE = 32.768kHz
LSI ≈ 40kHz
主要给:
- RTC 实时时钟
- 看门狗
3. PLL 是干什么的?
PLL:
Phase Locked Loop(锁相环)
简单理解:
一个"倍频器"。
比如,外部晶振:
HSE = 8MHz
经过 PLL:
8MHz × 9 = 72MHz
得到:
SYSCLK = 72MHz
STM32F1 很经典:
8MHz晶振
|
↓
PLL ×9
|
↓
72MHz系统时钟
所以你看到:
SystemCoreClock = 72000000;
意思就是:
CPU 主频 72MHz。
4. STM32 时钟树的大结构
简化成这样:
HSI
|
|
HSE --------> PLL
|
↓
SYSCLK
|
|
---------------
| |
↓ ↓
HCLK PCLK
| |
| |
CPU 外设
SYSCLK系统时钟
来源:
HSI
HSE
PLL
选择一个作为:
SYSCLK
例如:
SYSCLK = 72MHz
HCLK AHB 总线时钟。
通常:
HCLK = SYSCLK
例如:
SYSCLK 72MHz
↓
HCLK 72MHz
提供给:
- CPU
- DMA
- SRAM
- Flash接口
PCLK APB 外设时钟。
分两组:
APB1
低速外设:
例如:
- USART2
- I2C
- TIM2
通常:
PCLK1 <= 36MHz
APB2
高速外设:
例如:
- GPIO
- USART1
- ADC
- TIM1
通常:
PCLK2 <= 72MHz
例如 STM32F103:
SYSCLK
|
|
72MHz
|
+------ HCLK
| |
| CPU
|
+------ APB2
| |
| GPIO
| USART1
|
+------ APB1
|
USART2
I2C