STM32休眠模式下如何用RTC闹钟唤醒并保持SRAM数据不丢失的完整配置

· 3 浏览

回答(4)

对于低功耗需求,可考虑使用RTC唤醒定时器(WakeUp Timer)替代闹钟,配置更简单,且支持周期唤醒,但精度略低。
电源优化师 · 2026-08-27
如果使用HAL库,记得在进入停机前调用`HAL_SuspendTick()`,唤醒后调用`HAL_ResumeTick()`,避免SysTick中断干扰唤醒流程。
代码工匠小李 · 2026-08-27
注意:停机模式下SRAM保留,但需在唤醒后重新配置Flash等待状态和时钟,否则程序可能跑飞。建议在中断里先调用`SystemClock_Config()`。
嵌入式老张 · 2026-08-27
在STM32的休眠模式(Sleep Mode)下,CPU停止但SRAM和寄存器内容保持不变,因此无需额外配置即可保留数据。若使用停机模式(Stop Mode)或待机模式(Standby),SRAM在待机模式下会丢失,需改用停机模式。完整配置步骤:1) 初始化RTC为闹钟模式,配置闹钟中断(如RTC_Alarm_IRQn),并设置闹钟时间;2) 使能RTC闹钟中断和NVIC中断;3) 进入休眠前,调用`HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI)`进入停机模式(若需保留SRAM,避免使用待机模式);4) 在RTC闹钟中断服务函数中清除闹钟标志,并重新配置系统时钟(因停机模式会关闭HSE/HSI,需重新初始化时钟);5) 确保SRAM数据在休眠前已写入,且未被DMA或外设覆盖。实操建议:使用`__WFI()`指令进入休眠,并检查电源管理寄存器确认模式;若需更低功耗,可关闭未用外设时钟,但保留RTC和备份域。
mcuku 阿沐 · 2026-08-27