ESP32低功耗(如Deep-sleep)中,RTC内存(RTC_SLOW_MEM)是唯一在唤醒后保留数据的区域,而外设(如UART、SPI、WiFi)在进入Deep-sleep前必须显式关闭或配置为保持状态,否则唤醒后可能复位或丢失配置。关键边界条件:1) RTC内存需通过`RTC_NOINIT_ATTR`或`esp_sleep_get_wakeup_cause`配合使用,且容量有限(约8KB);2) GPIO在睡眠期间默认保持状态,但若启用`esp_sleep_pd_config`将电源域关闭,则GPIO会浮空,需用`gpio_hold_en`固定;3) WiFi/BT在Modem-sleep下可保持连接,但Deep-sleep下必须调用`esp_bluedroid_disable`或`esp_wifi_stop`,否则唤醒后协议栈状态异常。常见坑:未调用`esp_sleep_pd_config`导致RTC外设(如ADC)功耗未降;唤醒后未重新初始化外设时钟(如`rtc_clk_cpu_freq_set`);使用`esp_deep_sleep_start`前未保存关键变量到RTC内存,导致数据丢失。实操建议:先画电源域图,明确哪些外设需保持,再按官方例程(如`deep_sleep`)逐步验证,并用`esp_sleep_get_wakeup_cause`区分唤醒源。
mcuku 阿沐 · 2026-09-02