STM32进入及退出低功耗模式时变量及其内容留存问题咨询
STM32低功耗模式下变量存储状态说明
变量的保留情况和低功耗模式类型、变量存储的位置直接相关,以下是不同场景的具体说明:
1. 睡眠模式(Sleep Mode)
- 仅内核停止运行,所有外设、SRAM、Flash供电完全保持
- 所有存储在SRAM中的变量(全局变量、静态变量、栈变量、堆变量)全部保留原有内容,退出睡眠模式后可直接读取使用,不需要额外恢复操作
- 存储在Flash中的常量、代码段不会发生任何变化
2. 停止模式(Stop Mode)
- 内核、所有外设时钟停止,1.2V内核域可切换为降压器低功耗模式,但SRAM、Flash供电不会断开
- 普通SRAM存储的所有变量内容全部保留,退出停止模式后程序可以从暂停位置继续运行,不需要重新初始化变量
- 只要符合芯片 datasheet 规定的供电范围,就不会出现数据丢失的情况
3. 待机模式(Standby Mode)
- 1.2V内核域完全断电,普通SRAM、Flash全部停止供电,仅备份域(后备寄存器、部分型号支持的备份SRAM)和待机电路保持供电
- 存储在普通SRAM中的所有变量内容全部丢失,退出待机模式等价于芯片冷复位,所有全局/静态变量会回到代码定义的初始化值,栈、堆区内容全部清零
- 如果将变量定义到备份SRAM区域,且备份域接了VBAT独立供电,这部分变量可以在待机模式下保留内容,退出待机后可正常读取
注意:绝大多数STM32开发环境默认会在启动阶段自动对SRAM的
.bss段清零、对.data段赋初始值,即便你把变量放到了备份SRAM,退出待机后的复位阶段也会被启动代码覆盖,需要手动修改链接脚本或者启动文件,把备份SRAM对应的内存段排除在自动初始化范围外。
内容的提问来源于stack exchange,提问作者Amin-nano-sys
相关产品推荐
相关产品推荐

