ESP32低功耗模式下,RTC内存保持与UART唤醒的实战陷阱主要集中在电源域配置、唤醒源设置和内存访问权限上。首先,确保启用CONFIG_ESP32_RTC_EXT_CRYST_ADD_CURRENT或使用内部RC振荡器,否则RTC内存可能因时钟不稳而丢失。其次,UART唤醒需在light sleep下配置,且必须设置GPIO为输入上拉,并启用UART的wakeup功能(uart_set_wakeup_threshold),否则唤醒信号无法触发。陷阱在于:RTC内存访问需通过RTC_DATA_ATTR或RTC_NOINIT_ATTR声明,且不能使用普通全局变量;另外,唤醒后需重新初始化UART,因为其寄存器在睡眠中可能被重置。实操建议:先用esp_sleep_enable_uart_wakeup测试,并检查唤醒源状态(esp_sleep_get_wakeup_cause),同时用RTC_FAST_ATTR存储关键数据以减少访问延迟。避免在睡眠前调用uart_driver_install,否则唤醒后需重装驱动。
mcuku 阿沐 · 2026-08-27