3. STM32N6电源模式与唤醒机制

STM32N6 作为面向边缘 AI 推理的高性能 MCU,其功耗管理不是简单的“关掉外设”,而是围绕 CPU 内核、总线矩阵、SRAM、NPU 加速器、外设时钟与电源域之间的协同关系展开。理解 Run、Sleep、Stop、Standby 四种模式,关键要抓住三个维度:哪些电源域仍在供电、哪些时钟仍在运行、哪些状态会被保留。只有把这三者与唤醒源、唤醒延迟、切换开销对应起来,才能为边缘 AI 任务选出真正合适的模式。

四种模式的核心差异

Run 模式是芯片的完全工作状态。CPU、AXI/AHB 总线、SRAM、NPU、DMA 以及各外设时钟均可按需开启。此时功耗最高,但算力完整,适合执行神经网络推理、图像预处理、特征提取等对实时性要求高的任务。STM32N6 在 Run 下可通过动态电压频率调节(DVFS)在性能与功耗之间折中,例如在低频下运行轻量推理,在高频下处理突发帧。

Sleep 模式只关闭 CPU 时钟,内核停止取指与执行,但总线矩阵、SRAM、外设时钟和 NPU 状态仍然保持。任何使能的中断都能把 CPU 唤醒,唤醒延迟极短,通常只有几个时钟周期。它适合“CPU 等待外设”的场景,例如等待 DMA 搬运完一帧图像、等待 NPU 完成一次推理后取结果。此时 CPU 不耗动态功耗,但 SRAM 和 NPU 的漏电仍在,整体功耗高于 Stop。

Stop 模式关闭了主时钟和大部分外设时钟,SRAM 与寄存器内容通过低功耗稳压器保持,NPU 通常停止工作。唤醒源被限制为少数低功耗外设,如 RTC 闹钟、LPUART、LPTIM、EXTI 以及部分唤醒引脚。唤醒后程序从停止处继续执行,不需要重新初始化 SRAM 和关键寄存器,因此唤醒延迟在微秒到几十微秒量级。Stop 是边缘 AI 中“间歇工作”最常用的模式:采集一帧、推理一次、进入 Stop 等待下一帧触发。

Standby 模式关闭了内部主稳压器,SRAM 和大多数寄存器内容丢失,只有备份域(RTC、备份寄存器、部分唤醒逻辑)由 VBAT 或低功耗电源维持。唤醒相当于一次复位,程序从启动代码重新运行。它的静态功耗最低,但唤醒开销最大,且必须重新初始化时钟、外设和模型权重。Standby 适合长时间无事件、仅靠 RTC 或外部按键周期性唤醒的极低占空比场景。

STM32N6 电源模式:功耗、保持与唤醒开销对照 唤醒延迟 / 切换开销 → 功耗水平 → Run 全功能 / 最高功耗 NPU 可运行 Sleep CPU 停 / SRAM 保持 任意中断唤醒 Stop SRAM 保持 / NPU 停 RTC/LPTIM/EXTI 唤醒 Standby 仅备份域保持 唤醒≈复位 唤醒后重新初始化(Standby 需重启) 状态保持能力 Run / Sleep:SRAM、寄存器、NPU 状态全保留 Stop:SRAM 与寄存器保留,NPU 上下文需重建 Standby:仅备份域保留,其余全部丢失 典型唤醒源 Sleep:任意 EXTI、DMA、NPU 完成中断 Stop:RTC 闹钟、LPTIM、LPUART、唤醒引脚 Standby:WKUP 引脚、RTC 闹钟、IWDG 复位

唤醒源配置与状态保持

唤醒源的选择直接决定模式能否被正确退出。在 Sleep 下,只要 NVIC 中使能的中断都能唤醒 CPU,因此配置重点是“哪些中断允许唤醒”。例如 NPU 推理完成中断、DMA 传输完成中断、摄像头帧同步中断,都可以作为唤醒事件。进入 Sleep 前只需执行 __WFI() 或 __WFE(),无需额外关闭时钟。

Stop 模式的唤醒源受到严格限制。以 RTC 闹钟为例,需要先配置 RTC 时钟源为 LSE 或 LSI,设置闹钟寄存器,并使能 RTC 闹钟中断;同时要在 PWR 模块中把 RTC 闹钟设为唤醒源,并清除相关唤醒标志。若使用 LPUART 唤醒,则需保证 LPUART 时钟在 Stop 下仍由 LSE/LSI 提供,并配置其唤醒事件。典型配置顺序如下:

// 示例:配置 RTC 闹钟作为 Stop 唤醒源(参数为教学假设)
RCC->BDCR |= RCC_BDCR_LSEON;              // 开启 LSE
while(!(RCC->BDCR & RCC_BDCR_LSERDY));
RCC->BDCR |= RCC_BDCR_RTCSEL_0;          // RTC 时钟选 LSE
RCC->BDCR |= RCC_BDCR_RTCEN;             // 使能 RTC

RTC->CR |= RTC_CR_ALRAE;                 // 使能闹钟 A
RTC->ALRMAR = 0x01000000 | (1 << 0);    // 假设每秒触发一次
EXTI->IMR1 |= (1 << 17);                 // 使能 RTC 闹钟 EXTI 线
PWR->CR1 |= PWR_CR1_RTCWUP;              // 允许 RTC 唤醒

__WFI();                                  // 进入 Stop,等待闹钟唤醒

状态保持方面,Stop 模式下 SRAM 内容不会丢失,因此已经加载到 SRAM 中的神经网络权重、中间特征图可以继续使用,不必从 Flash 重新搬运。但 NPU 的内部流水线和部分配置寄存器可能已停止,唤醒后需要重新使能 NPU 时钟并恢复其工作配置。这一点在边缘 AI 任务中非常关键:如果每次 Stop 唤醒都重新加载模型,功耗优势会被 Flash 读取和初始化开销抵消。

Standby 模式则完全不同。唤醒后程序从复位向量开始执行,SRAM 内容不可预期,必须重新初始化系统时钟、外设和模型。它的优势在于静态电流极低,适合“一天只唤醒几次”的远程监测节点。若边缘 AI 任务需要频繁推理,Standby 的唤醒开销通常不划算。

切换开销与模式选择

切换开销包括进入开销和退出开销。进入 Stop 需要保存必要上下文、关闭外设时钟、配置唤醒源,通常几十微秒;退出 Stop 需要等待时钟稳定、恢复外设,约几微秒到几十微秒。Sleep 的进出开销最小,几乎可以忽略。Standby 的退出开销最大,因为要经历完整的启动流程,通常几百微秒到毫秒级。

为边缘 AI 任务选择模式,可以按“占空比”和“状态依赖”两个维度判断。若推理连续进行、帧率较高,应保持 Run 或仅在等待 DMA/NPU 时短暂进入 Sleep。若任务为“采集—推理—休眠”循环,且推理间隔在几十毫秒到几秒之间,Stop 最合适:SRAM 保持让模型权重无需重载,RTC 或外部事件可精确控制唤醒周期。若设备长期无事件、仅需周期性上报,且对唤醒后的初始化时间不敏感,则选 Standby。

在实际工程中,建议先用电流探头或功耗分析仪测量各模式下的静态电流与唤醒瞬态,再结合任务占空比估算平均功耗。例如假设 Run 电流 80 mA、Stop 电流 200 µA、Standby 电流 5 µA,若每 1 秒推理 20 ms,则 Stop 方案平均电流约为 80×0.02 + 0.2×0.98 ≈ 1.8 mA,远低于始终 Run 的 80 mA。具体数值需以实际芯片和板级测量为准。
进入 Stop 或 Standby 前,务必确认所有未使用外设时钟已关闭、GPIO 已配置为模拟或低功耗状态,避免悬空引脚产生额外漏电。同时要清除唤醒标志,防止刚进入就被旧事件立即唤醒。

综上,STM32N6 的四种电源模式并非简单的“越深越省”,而是功耗、保持能力与唤醒开销之间的权衡。边缘 AI 任务应优先考虑 Stop 模式作为间歇推理的主力,用 Sleep 处理短等待,用 Run 保证连续算力,仅在极低占空比场景才使用 Standby。