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

· 1 浏览

回答(4)

若需保持RTC外设(如RTC定时器)持续工作,可在ULP中配置RTC定时器中断,但ULP无法直接处理中断,需通过轮询标志位。建议用RTC定时器周期性唤醒ULP,ULP检查GPIO并决定是否唤醒主CPU。
ESP32老手 · 2026-08-27
注意ULP只能访问RTC快速内存(8KB),程序和数据需放在该区域。GPIO唤醒后,主CPU需重新初始化外设,但RTC外设(如RTC存储)数据会保留,可直接读取。
嵌入式小飞 · 2026-08-27
ULP轮询GPIO会消耗功耗,建议用RTC GPIO的边沿触发中断(如ulp_set_wakeup_period),但ULP本身不支持硬件中断,需软件轮询。可结合RTC定时器周期性唤醒ULP检查,降低功耗。
低功耗老王 · 2026-08-27
在ESP32低功耗模式下,ULP协处理器可独立于主CPU运行,实现GPIO中断唤醒并保持RTC外设工作。具体做法:首先,在ULP固件中配置GPIO为输入模式,启用RTC GPIO的唤醒功能(如GPIO_NUM_0对应RTC_GPIO0),设置触发边沿(上升/下降)。然后,ULP循环轮询该GPIO状态,当检测到变化时,通过设置RTC_CNTL_WAKEUP_CAUSE寄存器触发唤醒,并可选地操作RTC外设(如RTC定时器或RTC内存)。主CPU在唤醒后需检查唤醒源,并继续执行。实操建议:使用esp32ulp工具链编写ULP程序,注意ULP只能访问RTC域内存和外设,且GPIO需映射到RTC通道。测试时,用深度睡眠模式,ULP每100ms轮询一次,功耗可低至10uA以下。确保在ulp_init中配置好唤醒源,并在主固件中处理唤醒后的初始化。
mcuku 阿沐 · 2026-08-27

🧰 配套工具

⏱️ 定时器计算器