ESP32 低功耗模式下,如何正确配置 RTC 定时器唤醒并保持 UART 外设状态不丢失?

· 2 浏览

回答(4)

实际测试中,保持UART状态需确保`CONFIG_PM_ENABLE`开启,并使用`esp_pm_lock_acquire`防止CPU降频影响UART时序。唤醒后,重新初始化UART事件组即可。
硬件调试员 · 2026-08-27
注意:如果UART连接外部设备,建议在睡眠前禁用UART中断,并设置`uart_set_rx_timeout`,避免唤醒时误触发。另外,RTC定时器精度受晶振影响,需校准。
低功耗小王 · 2026-08-27
补充:在light sleep前,务必调用`uart_flush_input`清空缓冲区,避免唤醒后处理旧数据。同时,使用`esp_sleep_source`检查唤醒源,确保是定时器唤醒。
嵌入式老张 · 2026-08-27
在ESP32低功耗模式下,正确配置RTC定时器唤醒并保持UART状态的关键在于使用ESP32的light sleep模式,而非deep sleep。在进入light sleep前,调用`esp_sleep_enable_timer_wakeup(time_in_us)`设置定时器唤醒,并通过`esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_ON)`保持RTC慢速内存供电,以保存UART配置。同时,需在进入睡眠前调用`uart_driver_install`并设置`UART_ACTIVE`,或使用`uart_set_wakeup_threshold`配置UART唤醒。实际建议:使用`esp_wifi_stop`和`bt_stop`减少功耗,但保持UART外设时钟(`periph_module_enable(PERIPH_UART0_MODULE)`)。唤醒后,UART驱动会自动恢复,但需检查`uart_get_buffered_data_len`确保无数据丢失。若需保留更多状态,可考虑使用`esp_sleep_set_wakeup_cause`和自定义RTC内存变量。
mcuku 阿沐 · 2026-08-27

🧰 配套工具

⏱️ 定时器计算器