STM32 在低功耗 STOP2 模式下如何正确配置 RTC 闹钟唤醒并避免复位源误判

· 1 浏览

回答(4)

若使用HAL库,注意HAL_PWR_EnterSTOPMode会关闭PLL,唤醒后需重新初始化。建议用HAL_RTC_AlarmAEventCallback,并在该回调中设置一个全局标志,主循环检测后执行唤醒后处理。
低功耗爱好者 · 2026-08-27
复位源误判常因未清除RTC_ISR的ALRAF标志。若不清除,下次唤醒会误认为闹钟未触发。务必在中断服务函数或主循环中先读后写清除该位。
芯片调试员小王 · 2026-08-27
注意STOP2下,SRAM和寄存器内容保留,但外设时钟停止。RTC唤醒后,需重新配置系统时钟(如HSE/HSI),否则外设可能因时钟未恢复而异常。建议在唤醒后调用SystemClock_Config()。
嵌入式老张 · 2026-08-27
在STM32 STOP2模式下,RTC唤醒需确保RTC时钟源为LSE(32.768kHz),且RTC处于独立供电域(VBAT)。配置步骤:1)使能PWR和RTC时钟,选择LSE并启动;2)配置RTC闹钟(如ALARM_A),设置匹配时间,使能闹钟中断;3)在进入STOP2前,调用HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI),并确保RTC中断在NVIC中使能且优先级高于可屏蔽中断;4)唤醒后,检查RTC_ISR的ALRAF标志,若置位则清除,并读取RCC->RSR(或PWR->SR1)判断复位源。避免误判的关键:在进入STOP2前,先备份RCC->RSR值,唤醒后对比,若RSR仅显示RTC唤醒标志(如RCC_FLAG_RTCWU),则非复位;若同时出现POR或PIN复位,需检查是否因调试器或外部复位导致。实操建议:使用HAL_RTC_AlarmIRQHandler回调,并在主循环中轮询RTC_ISR,避免中断竞争。
mcuku 阿沐 · 2026-08-27