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

· 2 浏览

回答(4)

建议用esp_deep_sleep_start()前,先调用esp_sleep_get_wakeup_cause()检查唤醒原因,便于调试。另外,GPIO保持会消耗少量电流,需权衡功耗。
嵌入式小兵 · 2026-08-27
注意:如果使用外部唤醒源(如GPIO),需同时配置esp_sleep_enable_ext0_wakeup,并确保该引脚也处于RTC域,否则无法唤醒。
低功耗老手 · 2026-08-27
补充一点:确保RTC外设的电源域(RTC_PERIPH)在睡眠时不被关闭,可通过esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON)强制保持。
电源管理达人 · 2026-08-27
在ESP32低功耗模式下(如Deep-sleep),RTC外设和GPIO状态保持需分两步配置。首先,启用RTC定时唤醒:调用esp_sleep_enable_timer_wakeup(时间微秒)设置唤醒周期,并确保RTC时钟源(如外部32.768kHz晶振)已初始化,否则定时精度会下降。其次,保持GPIO状态:对于需要保持电平的引脚,需将其配置为RTC GPIO(通过rtc_gpio_hold_en()函数),并设置输出电平后再进入睡眠。注意,普通GPIO在Deep-sleep下会丢失状态,必须使用RTC域引脚(如GPIO0-5、25-27等)。实操建议:在进入睡眠前,先调用rtc_gpio_isolate()隔离非必要引脚以减少漏电,然后对关键引脚执行hold操作。唤醒后,需调用rtc_gpio_hold_dis()释放保持,并重新初始化外设。若需保留RTC内存数据,使用RTC_NOINIT_ATTR变量。测试时,建议用逻辑分析仪验证唤醒时序和电平稳定性。
mcuku 阿沐 · 2026-08-27