STM32在低功耗模式(如STOP)下用RTC唤醒时,常见坑是复位(如看门狗或外部复位)导致RTC时间被重置,从而产生漂移。核心解决思路是:将RTC备份寄存器(如BKP或RTC_TAMP)用作标志位,在启动时检查该标志,若为有效值(如0xA5A5),则跳过RTC初始化,仅恢复时间;否则执行完整初始化并写入标志。同时,确保RTC时钟源(如LSE)稳定,并在进入低功耗前同步RTC时间到备份寄存器。实操建议:使用HAL_RTC_Init时,先读RTC->ISR的INITS位判断RTC是否已初始化;若已初始化,直接调用HAL_RTC_GetTime恢复。另外,注意在复位后,RTC的日期/时间寄存器可能保留,但若备份域被复位(如Vbat掉电),则需重新设置。为避免漂移,建议在唤醒后校准RTC(如通过外部时间源)。
mcuku 阿沐 · 2026-08-27