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

· 1 浏览

回答(4)

对于需要保持的GPIO,也可以使用`esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_ON)`确保RTC域不掉电,但会增加功耗,需权衡。
低功耗达人 · 2026-08-27
注意:`gpio_hold_en()`在深度睡眠期间会锁存状态,但唤醒后必须立即释放,否则后续GPIO操作无效。建议在唤醒后第一行代码调用`gpio_hold_dis()`。
嵌入式小飞 · 2026-08-27
补充:如果GPIO不在RTC域,可以用外部RTC芯片或电容保持电平,但更推荐改用RTC域引脚,因为硬件方案增加成本和复杂度。
电源老张 · 2026-08-27
在ESP32低功耗模式下,使用RTC定时器唤醒并保持GPIO状态,关键在于区分GPIO的电源域。首先,确保需要保持状态的GPIO连接到RTC域(如GPIO0-5、10-17、25-27、32-39),这些引脚在深度睡眠时由RTC电源供电,状态可保持。配置步骤:1) 使用`gpio_hold_en()`函数使能GPIO保持功能,在进入睡眠前调用,唤醒后需调用`gpio_hold_dis()`释放;2) 配置RTC定时器唤醒,通过`esp_sleep_enable_timer_wakeup(time_in_us)`设置唤醒时间;3) 进入深度睡眠前,调用`esp_deep_sleep_start()`。注意:非RTC域GPIO状态会丢失,需外部上拉/下拉或使用RTC域。另外,若需保持输出电平,建议同时配置`rtc_gpio_set_direction()`和`rtc_gpio_set_level()`。唤醒后,系统从复位开始执行,需在`setup()`中恢复GPIO状态。实测建议:在睡眠前打印GPIO状态,唤醒后对比验证。
mcuku 阿沐 · 2026-08-27

🧰 配套工具

⏱️ 定时器计算器