1. 低功耗概览:Cortex-M 低功耗家族介绍、PMU 架构与设计原则

各位同学,欢迎来到这门课。我是你们的老朋友,一个在嵌入式低功耗领域摸爬滚打了十几年的工程师。

咱们这门课叫《ARM Cortex-M 低功耗模式驱动开发实战》。说白了,就是教你如何让一颗 Cortex-M 芯片,在电池供电的情况下,活得更久。你想想看,一个智能手表、一个 IoT 传感器节点,如果两天就没电了,那用户体验得多糟糕?

所以,第一章我们先不急着写代码。先把“低功耗”这件事的来龙去脉、硬件架构和设计原则理清楚。地基打牢了,后面盖楼才稳当。

1.1 Cortex-M 低功耗家族:你该选谁?

ARM Cortex-M 家族很庞大,从 M0 到 M7,再到最新的 M85,性能差异巨大。但它们在低功耗设计上,其实共享一套核心思想。我个人习惯把它们的低功耗特性分成三个梯队:

梯队 核心系列 低功耗特点 典型应用场景
极致能效 Cortex-M0 / M0+ / M23 门数最少,唤醒最快,功耗最低。M0+ 甚至支持“秒睡秒醒”。 智能门锁、遥控器、简单的传感器节点
平衡之选 Cortex-M3 / M4 / M33 性能与功耗的黄金平衡点。M4 带 DSP 和 FPU,M33 有 TrustZone。 可穿戴设备、工业传感器、BLE 网关
高性能兼顾 Cortex-M7 / M55 / M85 性能怪兽,但通过多级缓存和深度睡眠模式,也能做到不错的能效比。 音频处理、AI 推理、高端电机控制
我的建议: 别盲目追求“最省电”的 M0+。如果你的项目需要做 FFT 或者复杂的 PID 控制,M0+ 算不过来,反而要一直跑在高频,更费电。选型时,算力够用就行,留出 20% 余量。

1.2 功耗管理单元 (PMU) 架构:谁在管这些事?

你可能会问:“芯片怎么知道自己该睡了?谁在控制这些模式?” 答案是:功耗管理单元 (PMU)。

PMU 不是一个单独的硬件模块,而是一套分布在芯片各处的控制逻辑集合。它就像一个“总管家”,负责协调 CPU、外设、时钟和电源域的状态。

我画了一张图,帮你理解 PMU 的核心架构:

Cortex-M 功耗管理单元 (PMU) 核心架构 Cortex-M 核心 PMU 控制器 (SCB/SCR) 时钟管理 (RCC) 电源域 (PD) 外设 (UART/SPI/TIM) 唤醒源 (EXTI/PIN) PMU 通过系统控制块 (SCB) 和系统控制寄存器 (SCR) 下发指令,协调时钟、电源域和外设进入低功耗状态。

从这张图你能看到,PMU 控制器是大脑,它通过配置寄存器,告诉时钟管理模块“把主频降下来”,告诉电源域模块“把 CPU 的电源切掉”,同时告诉外设“你准备一下,要休眠了”。

关键点: 所有低功耗模式的切换,本质上都是 PMU 在操作 时钟门控 (Clock Gating) 和 电源门控 (Power Gating)。时钟门控是“停掉时钟”,功耗降低;电源门控是“切断电源”,功耗几乎为零,但唤醒后恢复时间更长。

1.3 低功耗设计原则:别让芯片“空转”

讲完了硬件,咱们聊聊设计思想。我在项目中遇到过不少新手,一上来就研究怎么进深度睡眠,结果发现功耗还是降不下去。为什么?因为忽略了基本原则。

我总结了三条铁律,你记一下:

  1. 能不跑,就不跑。 这是最高原则。如果 CPU 没事干,就让它睡。别让它在一个 while(1) 里空转,哪怕只空转 1ms,也是浪费。
  2. 能跑慢,别跑快。 同样的计算量,用 64MHz 跑 1ms,和用 8MHz 跑 8ms,功耗差很多。因为动态功耗与频率成正比,与电压的平方成正比。降频的同时往往还能降压,收益是立体的。
  3. 用多少,开多少。 外设是功耗大户。一个不用的 UART 模块,如果时钟没关,它依然在消耗电流。我见过一个项目,就因为忘了关一个 SPI 外设的时钟,待机电流多了 50uA。
我曾经踩过的坑: 有一次做一款温湿度记录仪,产品要求用纽扣电池撑一年。我自信满满地写了深度睡眠代码,结果实测待机电流 20uA,离目标 5uA 差得远。查了两天,最后发现是 GPIO 引脚在睡眠前没配置成模拟输入模式,导致内部上下拉电阻一直在漏电。从那以后,我每次进低功耗前,都会写一个 GPIO_DeInit() 函数,把所有不用的引脚都“清理”干净。

1.4 本章小结:一张表看懂核心概念

最后,我把这一章的核心概念整理成了一张表。你可以把它当作一个速查卡,后面写代码时随时回来看。

概念 一句话解释 我的经验
Sleep Mode CPU 停,外设和内存保持,唤醒最快。 适合等待一个 GPIO 中断的场景,比如按键扫描。
Deep Sleep / Stop Mode CPU 停,高频时钟停,部分外设可配置保持。 IoT 设备的主流模式,用 RTC 或外部中断唤醒。
Standby / Shutdown Mode 几乎全部断电,仅保留备份寄存器和唤醒逻辑。 功耗最低,但唤醒相当于复位。适合超低功耗的传感器节点。
Wake-up Time 从唤醒信号发出到 CPU 开始执行第一条指令的时间。 Standby 模式唤醒时间最长,可能到毫秒级。设计时要注意时序。
Power Domain 芯片内部独立的供电区域,可以单独开关。 有些芯片的 RTC 和备份寄存器有独立的 Vbat 引脚,即使主电源断了也能走时。