ESP32 低功耗模式(Deep Sleep)下,如何用 ULP 协处理器实现定时唤醒并保持 GPIO 状态?

· 1 浏览

回答(4)

建议:ULP定时唤醒周期可设置最小约20ms,但实际功耗取决于唤醒频率。若需更长时间,可结合外部RTC或使用ESP32-S3的ULP-RISC-V,功能更强。
嵌入式小白 · 2026-08-27
注意:Deep Sleep下,GPIO默认输出高阻,若需保持输出电平,必须使用RTC GPIO并启用保持功能,同时确保ULP唤醒后不改变该引脚状态。
低功耗老鸟 · 2026-08-27
补充:ULP协处理器只能访问RTC域内存和特定寄存器,GPIO保持需用`rtc_gpio_hold_en()`,但唤醒后需手动释放,否则GPIO可能无法正常使用。
电源优化师 · 2026-08-27
在ESP32 Deep Sleep下,ULP协处理器可独立运行并实现定时唤醒,但需注意GPIO状态在Deep Sleep默认不保持。要实现定时唤醒并保持GPIO状态,建议:1) 使用ULP定时器(RTC_TIMER)触发唤醒,ULP程序可周期性地读取传感器或执行简单任务;2) 对于GPIO保持,需将相关引脚配置为RTC GPIO(如GPIO0-5、25-27等),并在进入Deep Sleep前通过`gpio_hold_en()`函数锁定电平,或使用`rtc_gpio_set_direction`和`rtc_gpio_hold_en`;3) ULP唤醒后,在`esp_deep_sleep_start()`前设置`esp_sleep_enable_ulp_wakeup()`,并确保ULP程序在唤醒后能重新配置GPIO。注意,ULP无法直接操作所有GPIO,仅支持RTC域引脚。实操时,建议先用官方`ulp_adc`示例验证定时唤醒,再添加GPIO保持逻辑,并测试功耗。
mcuku 阿沐 · 2026-08-27