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 能否从睡眠模式中被特定事件激活。唤醒延迟则直接影响系统的实时响应能力。下图展示了从不同睡眠模式唤醒的典型流程与延迟构成。

MCU 睡眠模式唤醒延迟对比图 不同睡眠模式唤醒延迟对比 Sleep 模式 唤醒事件(任意中断) CPU 恢复运行 延迟:~1-5 µs Stop 模式 唤醒事件(USART / RTC) HSI/HSE 振荡器启动 CPU 恢复运行 延迟:~10-100 µs Standby 模式 唤醒事件(WKUP / RTC) 系统复位 从 Bootloader 启动 用户代码执行 延迟:~ms 级

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 模式切换与功耗权衡

在实际项目中,往往需要根据业务场景动态切换睡眠模式。下图展示了一种典型的动态功耗管理策略:

动态睡眠模式切换策略 动态睡眠模式切换策略 运行态 (Run) 功耗: ~10mA 空闲 Sleep 模式 功耗: ~1mA 长时间空闲 Stop 模式 功耗: ~10µA 串口数据到达 → 唤醒

上图展示了从运行态逐步降级到 Stop 模式的典型路径。当系统检测到串口长时间无数据时,先进入 Sleep 模式降低 CPU 功耗;若空闲时间进一步延长,则进入 Stop 模式,此时仅保留 USART 模块的唤醒能力。一旦串口数据到达,系统立即唤醒并回到运行态处理数据。

设计建议: 在进入 Stop 模式前,务必配置好 USART 的唤醒中断(如空闲中断或 RXNE 中断),并确保 DMA 处于待命状态。同时,建议在进入低功耗前关闭不必要的外设时钟,以进一步降低功耗。