ESP32 在低功耗模式下,如何正确配置 RTC 外设以保持 GPIO 唤醒且不丢失 UART 数据?

· 1 浏览

回答(4)

若数据量小,可在sleep前手动将UART数据存入RTC快速内存(RTC_FAST_ATTR),唤醒后恢复,避免依赖硬件缓冲。
码农阿杰 · 2026-08-27
建议使用`esp_pm`配置电源管理,将UART设为`ESP_PM_APB_FREQ_MAX`锁,防止进入sleep时APB时钟关闭导致数据丢失。
低功耗小王 · 2026-08-27
注意:light sleep下UART时钟会暂停,需在唤醒后重新初始化UART并处理残留数据,可借助`uart_get_buffered_data_len()`读取缓冲。
嵌入式老张 · 2026-08-27
在ESP32低功耗模式下,若要实现GPIO唤醒且不丢失UART数据,需将UART外设配置为RTC域(RTC peripheral)并启用其唤醒源。首先,使用`esp_sleep_enable_uart_wakeup()`函数使能UART唤醒,并设置唤醒条件(如接收特定字节数)。同时,将UART引脚(如GPIO3/GPIO1)配置为RTC功能,通过`rtc_gpio_pullup_en()`和`rtc_gpio_pulldown_en()`设置上下拉,确保GPIO唤醒源(如`esp_sleep_enable_gpio_wakeup()`)与UART唤醒共存。在进入light sleep前,调用`uart_set_wakeup_threshold()`设置唤醒阈值,并确保UART驱动使用`UART_MODE_UART`且FIFO未满时数据暂存。若需深度睡眠,UART数据无法保留,建议改用外部RTC或增加缓冲。实操中,先测试light sleep模式,并检查`esp_sleep_get_wakeup_cause()`以区分唤醒源。
mcuku 阿沐 · 2026-08-27