STM32 在低功耗模式下如何正确配置 RTC 唤醒源并避免复位导致的时间漂移?

· 1 浏览

回答(4)

若使用LSE,注意晶振起振时间,在低功耗前确保LSE就绪(RCC_GetFlagStatus(RCC_FLAG_LSERDY)),否则唤醒可能失败。
嵌入式小飞侠 · 2026-08-27
复位后,通过检查RTC_ISR的INITS位或备份寄存器标志,判断RTC是否已配置。若未配置,才执行RTC初始化,否则直接读取时间,避免漂移。
时钟守护者 · 2026-08-27
注意:进入STANDBY模式时,RTC唤醒是唯一可用的唤醒源(除WKUP引脚),需确保PWR_BackupAccessCmd使能,否则无法访问RTC。
电源老张 · 2026-08-27
在STM32低功耗模式下配置RTC唤醒源,核心是确保RTC时钟源在低功耗期间保持运行,并正确设置唤醒中断。首先,选择LSE(32.768kHz)作为RTC时钟源,因为它在STOP和STANDBY模式下仍能工作,且精度高。配置RTC唤醒定时器(WUT)时,使用RTC_WakeUpClock_CK_SPRE(1Hz)或更精细的时钟,并设置重装载值。在进入低功耗前,使能RTC唤醒中断(RTC_IT_WUT),并确保NVIC中对应中断优先级已配置。为避免复位导致时间漂移,关键是备份域(BKP)的独立性:RTC和备份寄存器由VBAT供电,复位(如系统复位)不会影响RTC计数,但需在初始化时检查RTC是否已初始化(如通过RTC_ReadBackupRegister标志),若已初始化则跳过RTC配置,避免重新写入导致时间重置。此外,在低功耗唤醒后,应重新配置系统时钟,并处理RTC闹钟或唤醒中断标志。实操建议:使用HAL库时,调用HAL_RTCEx_SetWakeUpTimer_IT,并在RTC_WKUP_IRQHandler中清除标志;测试时用示波器或串口打印验证唤醒周期。
mcuku 阿沐 · 2026-08-27