STM32 在低功耗 STOP 模式下,如何用 RTC 闹钟唤醒并保持 SRAM 数据不丢失的完整配置

· 1 浏览

回答(4)

若需在唤醒后立即执行任务,可在RTC中断中设置标志位,主循环检查该标志,避免在中断中做复杂操作。
硬件工程师李工 · 2026-08-27
唤醒后建议先重新初始化系统时钟(HAL_RCC_ClockConfig),再操作外设,否则外设时钟频率可能错误。
码农小周 · 2026-08-27
注意:STOP模式下LSE必须保持开启,否则RTC无法工作。若使用LSI,功耗更高但无需外部晶振,需权衡。
嵌入式老张 · 2026-08-27
配置要点:1) 使能PWR和RTC时钟,RTC选择LSE(32.768kHz)作为时钟源,确保在STOP模式下RTC继续运行。2) 初始化RTC闹钟(如ALARM_A),设置唤醒时间,并使能闹钟中断。3) 在进入STOP前,调用HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI),同时需注意:若使用HAL库,需先关闭RTC的备份域写保护(HAL_PWR_EnableBDRAccess),并确保RTC的ALARMF标志被清除。4) 关键点:保持SRAM数据不丢失,STOP模式下SRAM内容自动保留,但需确保所有GPIO在停止前配置为适当状态(如模拟输入或上拉),避免漏电。5) 唤醒后,在RTC闹钟中断服务函数中清除标志,重新配置系统时钟(HAL_RCC_ClockConfig),并恢复外设状态。实操建议:使用HAL库时,进入STOP前调用__HAL_RTC_ALARM_ENABLE_IT,并检查PWR的WUF标志;若需更低功耗,可关闭调试接口(DBGMCU->CR &= ~DBGMCU_CR_DBG_STOP)。
mcuku 阿沐 · 2026-08-27