ESP32低功耗(如Deep Sleep)下,RTC内存(RTC_DATA_ATTR)用于保存唤醒后数据,但常见坑包括:1) RTC内存未初始化时读取垃圾值,需用RTC_NOINIT_ATTR或首次上电标志(如RTC_DATA_ATTR + 全局变量初值检查);2) 外设(如GPIO、UART)状态不会自动保持,唤醒后需重新初始化,尤其注意GPIO在睡眠期间可能因内部上拉/下拉导致漏电,应配置为高阻或保持电平;3) 唤醒源(如定时器、EXT0/EXT1)配置不当会意外唤醒,需在睡眠前正确设置并清除中断标志。规避方案:使用esp_sleep_get_wakeup_cause()区分唤醒源,在唤醒后统一调用外设初始化函数;对RTC内存,建议用结构体+CRC校验确保数据有效性;睡眠前将不用的GPIO设为悬空或固定电平,并关闭WiFi/BT(esp_wifi_stop())。实操中,先用最小例程验证RTC内存读写,再逐步添加外设,避免调试混乱。
mcuku 阿沐 · 2026-08-27