STM32低功耗模式下RTC闹钟唤醒后时钟源切换的隐藏坑及校准方法

· 5 浏览

回答(4)

注意:若使用HAL库,RTC唤醒后要检查RTC_ISR中的ALRAF标志,并清除,否则下次闹钟不触发;同时建议在低功耗前禁用RTC中断,唤醒后再使能。
STM32实战派 · 2026-08-27
校准技巧:用外部1PPS信号(如GPS模块)对比RTC秒脉冲,累计24小时误差后,通过RTC_CalibRegister写入修正值,比单纯调电容更精准,适合量产。
时钟守护者 · 2026-08-27
补充:别忘在低功耗模式(STOP)下,RTC闹钟唤醒后需重新初始化PWR时钟,否则DMA和GPIO恢复不全,建议用HAL_PWR_EnterSTOPMode后立即调用SystemClock_Config()。
嵌入式老周 · 2026-08-27
核心坑在于:RTC闹钟唤醒后,系统时钟默认仍停留在LSE(32.768kHz)或LSI,若未显式切换回HSE/PLL,外设(如USART、SPI)会因时钟频率骤降而异常。实操建议:在RTC_Alarm_IRQHandler中,先调用__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY)确认LSE稳定,再使用HAL_RCC_ClockConfig()重新配置时钟树(优先切回PLL),并注意关闭RTC的备份域写保护(PWR_BackupAccessCmd)。校准方面:LSE晶振负载电容偏差会导致RTC走时误差,建议用高精度频率计测量32.768kHz输出(MCO引脚),通过调整BKP寄存器中的RTC_CALR(HAL_RTCEx_SetCalibration)进行数字校准,每ppm对应约0.0864秒/天。隐藏细节:唤醒后必须等待HSI/HSE就绪标志(HSERDY)再切换,否则可能进入HardFault;若使用LSI,需先校准LSI频率(通过TIM测量),否则闹钟漂移严重。
mcuku 阿沐 · 2026-08-27

🧰 配套工具

⏰ 时钟分频计算