ESP32深度睡眠时RTC内存(RTC_SLOW_MEM)可保持数据,但唤醒后外设需重新初始化,这是常见陷阱。关键点:1)用RTC_DATA_ATTR或RTC_NOINIT_ATTR声明变量,确保数据在RTC域,避免用普通全局变量(可能被清零)。2)唤醒后,GPIO、SPI、I2C、UART等外设寄存器会复位,必须重新调用初始化函数,但注意不要重复初始化RTC内存中的状态机。3)建议在唤醒入口用esp_sleep_get_wakeup_cause()判断原因,区分首次上电和深度睡眠唤醒,分别执行完整初始化或仅外设重配。实操上,将外设初始化封装为函数,并在唤醒后调用,同时用标志位(存于RTC内存)跳过不必要的重复配置。另外,注意RTC内存容量有限(约8KB),避免存大数组。调试时可用ESP_LOG在唤醒后打印RTC变量验证保持性。
mcuku 阿沐 · 2026-08-27