先搞懂它是什么
- 时钟(Clock):芯片的“心跳”,所有模块(CPU、串口、定时器、Wi-Fi)都靠一个节拍信号工作,节拍越快,干活越快、功耗也越高。
- 时钟树(Clock Tree):把少数几个“源头时钟”(晶振/RC)经过分频、倍频,分发给不同外设的一套分配网络,就像城市的发电厂 → 变电站 → 各楼栋。
- 启动流程(Boot):芯片上电后先跑固化在 ROM 里的引导代码,再加载用户固件、初始化堆栈与时钟,最后进入
main()——这一串动作的顺序就是启动流程。 - 为什么要懂:串口乱码、外设不工作、低功耗唤醒异常,八成和时钟配置有关;面试和课程考试也常考“时钟树怎么走、启动分几步”。
层层拆解原理
1. 时钟源(Clock Sources)
MCU 的时钟源头通常有几种,成本、精度、功耗各不相同:
| 时钟源 | 精度 | 特点 | 典型用途 |
|---|---|---|---|
| 外部高速晶振(XTAL) | 高 | 需要外围晶振电路,上电稳定慢 | 系统主时钟、无线射频参考 |
| 内部 RC 振荡器(RC) | 中低 | 免外围器件、上电快,但温漂大 | 快速启动、低功耗模式 |
| 外部低速晶振(32.768kHz) | 高 | 极省电 | RTC、低功耗定时唤醒 |
| PLL(锁相环) | 由输入决定 | 把低频倍频到高频 | 高主频运行 |
Ai-Thinker-WB2 SDK 中,BL602 使用 40MHz 无源晶振(XTAL)与内部 RC32M 作为时钟源,低功耗例程 wl_ble_lp 中有时钟源切换逻辑。
2. 时钟分配:分频 + 门控
高频主时钟不能直接给所有外设,需要:
- 分频:降低频率给低速外设,例如把系统时钟分频后给 UART 做波特率基准、给定时器做计数基准。
- 门控(Clock Gating):不用某个外设时把它的时钟“关掉”,这是低功耗的重要手段。BL602 的时钟/外设门控寄存器在 SDK 的
bl602_glb.h中(如GLB_CGEN_S1A、GLB_CGEN_S2系列),低功耗例程wl_ble_lp通过操作这类寄存器开关外设时钟,具体位名以bl602_glb.h为准。
3. 启动流程(Boot Sequence)
对应到 SDK 例程,main() 里常见的前几步就是启动流程的缩影:board_init() → 串口初始化(shell_init_with_task)→ rfparam_init 射频参数 → 创建应用任务 → vTaskStartScheduler()。
4. 复位来源(Reset Sources)
芯片可以被多种原因复位:上电复位(POR)、外部复位引脚(RST)、看门狗复位(WDG)、软件复位(bl_sys_reset_system() 一类接口)。区分复位来源是排查“为什么程序重启”的第一步,SDK 的系统控制栏目有对应实验(软件重启、崩溃调试)。
结合 SDK 看实现
- 环境准备与烧录:SDK 简介 | 快速开始(Linux)
- 相关例程页:系统控制总览、睡眠模式、软件重启
以 SDK 低功耗例程的时钟恢复代码为例,可以看到“上电主频 → 分频降频 → 门控外设时钟”的完整思路:
/* 低功耗唤醒后:把 CPU 主频降到低功耗档,并只保留必要外设时钟 */
static void set_low_clk_and_gate_clk(void)
{
/* 系统时钟分频:把主频降到低功耗档 */
/* 门控:只保留 CPU/DMA/UART0/Flash 等必要模块,其余外设关时钟 */
/* BL602 的时钟/外设门控寄存器在 SDK 的 bl602_glb.h 中,
如 GLB_CGEN_S1A、GLB_CGEN_S2 系列,具体位名以 bl602_glb.h 为准 */
}常见考点 / 面试题
为什么外设需要独立的时钟,而不是直接用 CPU 主频?
不同外设对频率和精度的要求不同(如 UART 需要精确的波特率基准、定时器需要可调分频),且外设时钟门控是实现低功耗的关键——不用时关掉,能大幅省电。
系统上电后为什么要经过 ROM 引导,而不是直接运行用户程序?
ROM 引导负责初始化堆栈、基础时钟,并从 Flash 校验/加载用户固件,保证固件完整性和统一的启动入口;这也是 OTA 升级能“换了固件仍能启动”的基础。
串口乱码可能和时钟有什么关系?
波特率是根据时钟分频算出来的,如果系统时钟源/分频配置变了而波特率没重算,收发双方频率不一致就会出现乱码;低功耗唤醒后忘记恢复时钟也是常见原因。
RTC 为什么常用 32.768kHz 的外部晶振?
32.768kHz = 2^15 Hz,分频后正好得到 1 秒的计数节拍,且极低功耗,适合掉电后仍走时、定时唤醒。
PLL、分频器、门控三者分别解决什么问题?
PLL 负责“倍频”得到更高主频;分频器负责“降压”适配不同外设;门控负责“开关”节省功耗。三者配合构成完整时钟树。
遇到问题?
如有其他问题,请到统一的提问与讨论区:Ai-Thinker Discussions

