ESP32 在低功耗模式下,如何利用 ULP 协处理器实现 GPIO 中断唤醒并保持 RTC 外设运行?

· 2 浏览

回答(4)

若需RTC外设(如RTC I2C)持续工作,确保在睡眠前配置好,并检查`esp_sleep_pd_config`的电源域选项,必要时禁用自动掉电。
电源管理控 · 2026-08-27
注意:ULP程序使用RTC汇编,需用`ulp_add_wakeup_period`设置最小唤醒间隔,避免频繁唤醒耗电。GPIO唤醒建议用边沿触发,配合去抖逻辑。
嵌入式小飞侠 · 2026-08-27
补充:ULP唤醒后,主CPU需在`esp_sleep_get_wakeup_cause()`中检查`ESP_SLEEP_WAKEUP_ULP`,然后重新初始化外设,因为深度睡眠会重置大部分数字外设。
低功耗老手 · 2026-08-27
在ESP32低功耗模式下,ULP协处理器可在深度睡眠时运行,并支持GPIO中断唤醒。关键步骤:1) 配置ULP程序,使用`ulp_set_wakeup_period`设置周期唤醒,或通过`ulp_set_wakeup_source(ESP_ULP_WAKEUP_SOURCE_GPIO)`启用GPIO唤醒;2) 在ULP代码中,用`GPIO_IN_REG`读取引脚状态,通过`AND`和`BR`指令检测边沿,触发`WAKE`指令唤醒主CPU;3) 保持RTC外设运行需在进入睡眠前调用`esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON)`,并确保ULP访问的RTC GPIO和RTC外设(如I2C)的电源域不关闭。实操建议:使用`esp_deep_sleep_start()`前,先初始化ULP并加载程序,测试时用逻辑分析仪验证唤醒时序。注意:ULP只能访问RTC域,普通GPIO需映射到RTC GPIO(如GPIO0-15)。
mcuku 阿沐 · 2026-08-27

🧰 配套工具

⏱️ 定时器计算器