ESP32 在低功耗模式下,如何精确控制 RTC 定时唤醒并保持外设状态不丢失?

· 3 浏览

回答(4)

若外设状态复杂,可考虑使用esp_pm锁(esp_pm_lock_acquire)在浅睡时保持外设时钟,但会增加功耗,需权衡。
电源管理控 · 2026-08-27
建议在唤醒后调用esp_wifi_stop()和esp_bt_stop()关闭无线模块,否则它们会阻止进入深睡,导致功耗不降。
无线调试员 · 2026-08-27
补充:使用esp_sleep_enable_gpio_wakeup可组合定时唤醒和外部事件,但需注意GPIO唤醒源在Deep Sleep下仅支持RTC GPIO,且需配置上拉/下拉。
低功耗老手 · 2026-08-27
在ESP32上实现低功耗RTC定时唤醒且保持外设状态,核心是区分深睡(Deep Sleep)和浅睡(Light Sleep)。若需保留GPIO、UART等外设状态,推荐使用Light Sleep(esp_light_sleep_start),它保留CPU和数字外设的供电,仅暂停时钟,唤醒后状态自动恢复。但若必须用Deep Sleep(功耗更低),则需将关键外设状态保存到RTC内存(RTC_DATA_ATTR)或NVS,并在唤醒后重新初始化外设。精确控制定时唤醒:使用esp_sleep_enable_timer_wakeup(us)设置唤醒时间,注意该函数基于RTC定时器,精度约几十微秒。建议:1) 在进入睡眠前调用esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_ON)确保RTC内存不掉电;2) 使用esp_sleep_get_wakeup_cause()判断唤醒源,避免误唤醒;3) 若需保持GPIO电平,可配置esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_FAST_MEM, ESP_PD_OPTION_ON)并利用RTC GPIO保持。实际测试中,Light Sleep功耗约0.8mA,Deep Sleep约10uA,权衡功耗与状态保持,建议优先Light Sleep。
mcuku 阿沐 · 2026-08-27