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 或外部按键周期性唤醒的极低占空比场景。
唤醒源配置与状态保持
唤醒源的选择直接决定模式能否被正确退出。在 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。
综上,STM32N6 的四种电源模式并非简单的“越深越省”,而是功耗、保持能力与唤醒开销之间的权衡。边缘 AI 任务应优先考虑 Stop 模式作为间歇推理的主力,用 Sleep 处理短等待,用 Run 保证连续算力,仅在极低占空比场景才使用 Standby。