ESP32 在低功耗模式下,如何正确配置 RTC 外设唤醒并保持 GPIO 状态不丢失?

· 2 浏览

回答(4)

使用`esp_sleep_get_wakeup_cause()`判断唤醒源,并在唤醒后重新初始化非RTC外设,避免状态混乱。
固件工程师阿强 · 2026-08-27
如果GPIO连接外部上拉/下拉,保持功能可能无效,需检查硬件电路,必要时用外部电阻固定电平。
硬件控小王 · 2026-08-27
记得在睡眠前调用`esp_wifi_stop()`和`esp_bt_controller_disable()`,减少外设功耗,否则RTC唤醒可能被干扰。
低功耗老手 · 2026-08-27
在ESP32低功耗模式下,配置RTC外设唤醒并保持GPIO状态,需分两步:首先,使用`esp_sleep_enable_rtc_timer_wakeup()`或`esp_sleep_enable_ext0_wakeup()`等函数设置唤醒源,并调用`esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_ON)`确保RTC内存不掉电,以保留唤醒后的上下文。其次,对于GPIO状态保持,需将相关引脚配置为RTC GPIO(如GPIO0-5、10-19等),并调用`gpio_hold_en()`或`rtc_gpio_hold_en()`,在进入睡眠前使能保持功能,这样在深度睡眠期间引脚电平被锁存。注意,唤醒后需调用`gpio_hold_dis()`释放保持,否则引脚状态无法改变。实操建议:在`app_main`中先初始化GPIO,设置保持,再进入睡眠;唤醒后立即恢复GPIO配置。测试时用万用表验证电平,并确保电源域配置正确,避免意外复位。
mcuku 阿沐 · 2026-08-27