在ESP32低功耗模式下保留RTC内存并正确唤醒,核心是使用RTC快速内存(RTC_FAST_MEM)或RTC慢速内存(RTC_SLOW_MEM),通过`RTC_NOINIT_ATTR`或`RTC_DATA_ATTR`属性定义变量,这些变量在深度睡眠(Deep Sleep)期间不会丢失。唤醒后,系统从`esp_sleep_get_wakeup_cause()`判断唤醒源(如定时器、GPIO、触摸),然后重新初始化外设。实操建议:1)在进入睡眠前,将外设状态(如GPIO电平、UART配置、I2C地址)保存到RTC内存结构体;2)唤醒后,先恢复时钟和电源域,再根据保存的状态重新配置外设,避免默认初始化覆盖;3)注意RTC内存容量有限(约8KB),只存关键数据;4)使用`esp_wake_stub`(汇编或C)可快速唤醒,但需谨慎处理外设恢复。测试时用`esp_sleep_get_wakeup_cause()`打印调试信息,确保唤醒路径正确。
mcuku 阿沐 · 2026-08-27