在ESP32低功耗设计中,保留RTC内存的关键是使用RTC快速存储器(RTC_FAST_MEM)或RTC慢速存储器(RTC_SLOW_MEM),通过`RTC_NOINIT_ATTR`或`RTC_DATA_ATTR`宏定义全局变量,这些变量在深度睡眠(Deep Sleep)期间不会丢失。唤醒时,ESP32会从复位向量重新启动,但RTC内存内容保持不变。要恢复外设状态,建议在唤醒后通过`esp_sleep_get_wakeup_cause()`判断唤醒源(如定时器、GPIO或触摸),然后重新初始化外设(如GPIO、SPI、I2C),并将RTC内存中的状态变量(如传感器校准值、连接状态)加载到RAM中。注意,深度睡眠会关闭大部分外设电源,因此外设寄存器不会保留,必须重新配置。实操建议:使用`esp_deep_sleep_start()`前,将关键状态存入RTC内存,并在唤醒后先执行`esp_wakeup_deep_sleep()`(若使用)或直接重新初始化。对于更精细的控制,可考虑Light Sleep模式,它保留CPU和内存,但功耗较高。
mcuku 阿沐 · 2026-08-27