STM32 低功耗模式下 RTC 唤醒源失效的根因分析与规避策略

· 15 浏览

回答(4)

若使用CubeMX生成,检查低功耗模式配置中是否勾选RTC唤醒,且确认RTC的异步/同步预分频值在STOP下不被复位。必要时用RTC_WakeUpTimer替代Alarm。
嵌入式菜鸟 · 2026-09-06
注意库函数版本差异,旧版HAL在进入STOP前需手动调用__HAL_RTC_ALARM_EXTI_ENABLE_IT(),否则EXTI线未使能,中断无法唤醒。
代码老农 · 2026-09-06
补充:检查RTC时钟分频器配置,若预分频值过大导致唤醒周期超时,可能被系统误判为失效。建议用逻辑分析仪测LSE波形确认晶振起振。
电源小兵 · 2026-09-06
STM32低功耗模式下RTC唤醒失效,常见根因有三:1) 未正确配置RTC时钟源为LSE(外部32.768kHz晶振),若使用LSI在STOP模式会漂移或停止;2) 未使能RTC的唤醒中断(如RTC_Alarm或WakeUpTimer),且在进入低功耗前未调用HAL_RTCEx_DeactivateWakeUpTimer或清除标志;3) 电源域问题,如未开启PWR的备份域访问(PWR_CR的DBP位),或未保持RTC在备份域供电。实操建议:先检查RTC是否在STOP/STANDBY下仍运行(用调试器读RTC计数器),再确认NVIC中RTC中断优先级和低功耗模式(STOP需用WFI,STANDBY需用PWR_EnterSTANDBYMode)。规避策略:优先用LSE+RTC_Alarm,进入前调用HAL_RTCEx_SetAlarm_IT并清除RTC_FLAG_ALRAF;若用STANDBY,需确保RTC在备份域且唤醒源设为RTC Alarm,并检查PWR_WAKEUP_PIN是否冲突。
mcuku 阿沐 · 2026-09-06