3、低功耗设计基础:MCU睡眠模式分类(Sleep/Stop/Standby),唤醒源与唤醒延迟
在嵌入式低功耗系统中,MCU 的睡眠模式是降低功耗的核心手段。不同的睡眠模式在功耗、唤醒延迟、外设保持状态和唤醒源上存在显著差异。理解这些差异,是设计串口低功耗唤醒方案的前提。
3.1 MCU 睡眠模式分类
主流 MCU(如 STM32、GD32、NXP LPC 系列)通常提供三种主要的低功耗模式:Sleep(睡眠)、Stop(停止) 和 Standby(待机)。下表从多个维度对比了这三种模式的核心特性。
| 特性 | Sleep(睡眠) | Stop(停止) | Standby(待机) |
|---|---|---|---|
| CPU 时钟 | 关闭 | 关闭 | 关闭 |
| SRAM / 寄存器 | 保持 | 保持 | 丢失(仅备份域保持) |
| 外设时钟 | 可配置(部分保持) | 关闭(可配置保持) | 关闭 |
| 典型功耗 | ~mA 级 | ~µA 级 | ~nA 级 |
| 唤醒延迟 | ~µs 级 | ~10µs ~ 100µs | ~ms 级(需系统复位) |
| 唤醒方式 | 任意中断 / 事件 | 特定外设中断 / RTC / 外部事件 | RTC / 外部复位 / Wakeup Pin |
| 退出后执行 | 从中断处继续 | 从中断处继续 | 从复位向量重新启动 |
设计要点: 对于串口低功耗唤醒场景,Stop 模式是最常用的选择。它在功耗(µA 级)和唤醒延迟(几十 µs)之间取得了较好的平衡,且能保持 SRAM 内容和部分外设配置,支持 USART 中断唤醒。
3.2 唤醒源与唤醒延迟分析
唤醒源决定了 MCU 能否从睡眠模式中被特定事件激活。唤醒延迟则直接影响系统的实时响应能力。下图展示了从不同睡眠模式唤醒的典型流程与延迟构成。
3.3 串口唤醒的关键约束
在串口低功耗唤醒设计中,需要重点关注以下约束条件:
- 外设时钟保持: 在 Stop 模式下,USART 模块的时钟必须保持开启(通常使用 HSI 或 LSE 作为时钟源),否则无法检测起始位。
- 中断响应能力: 只有支持在 Stop 模式下工作的中断(如 USART 空闲中断、RXNE 中断)才能作为唤醒源。
- 数据不丢失: 唤醒后,CPU 需要能够正确接收唤醒前已经到达的第一个字节数据,这通常需要 DMA 或硬件 FIFO 的配合。
- 唤醒延迟容忍: 如果系统对响应时间要求极高(如 < 10 µs),则只能选择 Sleep 模式,但功耗会上升。
经验法则: 对于大多数电池供电的 IoT 设备,使用 Stop 模式 + USART 空闲中断唤醒 是功耗与性能的最佳折中点。典型功耗可控制在 5-20 µA,唤醒延迟在 50 µs 以内,足以应对 115200 bps 甚至更高波特率的串口数据。
3.4 唤醒源选择策略
下表列出了在 Stop 模式下常用的串口相关唤醒源及其适用场景:
| 唤醒源 | 触发条件 | 适用场景 | 注意事项 |
|---|---|---|---|
| USART 起始位检测 | RX 线出现下降沿 | 任意串口数据唤醒 | 需要 USART 时钟保持,功耗略高 |
| USART 空闲中断 | RX 线空闲超过 1 个字节时间 | 帧结束唤醒,配合 DMA 接收 | 需要先接收数据才能产生空闲标志 |
| RTC 闹钟 | 定时时间到 | 周期性唤醒检查串口 | 无法实时响应,有延迟 |
| 外部中断 (GPIO) | 特定引脚电平变化 | 带硬件流控的串口唤醒 | 需要额外引脚,增加 BOM 成本 |
常见误区: 不要试图在 Standby 模式下使用 USART 唤醒。Standby 模式下所有外设时钟均关闭,USART 模块无法工作,必须通过 RTC 或专用唤醒引脚先退出 Standby,再初始化串口,这会导致 ms 级的延迟和额外的功耗开销。
3.5 模式切换与功耗权衡
在实际项目中,往往需要根据业务场景动态切换睡眠模式。下图展示了一种典型的动态功耗管理策略:
上图展示了从运行态逐步降级到 Stop 模式的典型路径。当系统检测到串口长时间无数据时,先进入 Sleep 模式降低 CPU 功耗;若空闲时间进一步延长,则进入 Stop 模式,此时仅保留 USART 模块的唤醒能力。一旦串口数据到达,系统立即唤醒并回到运行态处理数据。
设计建议: 在进入 Stop 模式前,务必配置好 USART 的唤醒中断(如空闲中断或 RXNE 中断),并确保 DMA 处于待命状态。同时,建议在进入低功耗前关闭不必要的外设时钟,以进一步降低功耗。