核心坑在于: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