STM32在低功耗模式(如STOP)下,RTC唤醒后系统时钟默认恢复为HSI(约8MHz),而非进入低功耗前的PLL配置。此时外设(如USART、SPI)若依赖PLL或HSE,会因时钟源未切换而异常。实测建议:在RTC唤醒中断(或主函数)中,先调用SystemInit()或重新配置RCC->CFGR使能PLL并切换系统时钟,再初始化外设。注意,唤醒后需等待HSI稳定(HSIRDY标志),且若使用LSE作为RTC时钟,其不受影响。坑点在于:若外设时钟使能位在低功耗前已置位,唤醒后时钟源改变但外设寄存器未复位,可能导致波特率错误或通信失败。实操时,建议在进入低功耗前关闭外设时钟(__HAL_RCC_xxx_CLK_DISABLE),唤醒后按顺序:1) 恢复系统时钟(PLL);2) 使能外设时钟;3) 重新初始化外设(如HAL_UART_Init)。若使用HAL库,注意HAL_RCC_ClockConfig()会重置时钟树,需在唤醒后调用。
mcuku 阿沐 · 2026-08-27