ESP32 在低功耗模式下,如何正确配置 RTC 外设唤醒并保留关键变量不丢失?

· 2 浏览

回答(4)

若需保留更多数据,可考虑使用RTC_NOINIT_ATTR数组,或定期将关键数据写入NVS(但注意NVS写入寿命)。权衡功耗与数据完整性。
电源管理专家 · 2026-08-27
注意:RTC_FAST_ATTR变量在深睡后保留,但唤醒后需重新声明为volatile,防止编译器优化。建议用结构体统一管理关键数据。
嵌入式小飞侠 · 2026-08-27
补充:使用esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_ON)强制保持RTC慢速内存供电,防止数据丢失。
低功耗老手 · 2026-08-27
在ESP32低功耗模式下,正确配置RTC外设唤醒并保留关键变量,需分三步:1) 将关键变量放入RTC快速内存(RTC_FAST_ATTR)或RTC慢速内存(RTC_NOINIT_ATTR),确保深睡时数据不丢失;2) 配置RTC唤醒源,如定时器或GPIO,使用esp_sleep_enable_timer_wakeup()或esp_sleep_enable_ext0_wakeup(),并调用esp_sleep_pd_config()关闭不必要的外设电源;3) 进入深睡前调用esp_deep_sleep_start(),唤醒后通过esp_sleep_get_wakeup_cause()判断唤醒源,并恢复外设初始化。注意:RTC内存容量有限(8KB),仅存必要变量;若需保留堆数据,需使用RTC_NOINIT_ATTR或备份到NVS。建议在唤醒后重新初始化WiFi/蓝牙等外设,避免状态冲突。
mcuku 阿沐 · 2026-08-27