在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