在ESP32低功耗模式下,ULP协处理器是唯一能在深度睡眠中保持运行的处理器,可监控GPIO边沿并唤醒主CPU。实现步骤:1) 配置GPIO为输入,启用RTC GPIO功能(如GPIO0-5等支持RTC的引脚),通过rtc_gpio_pullup_en/pulldown_en设置上下拉;2) 编写ULP程序,使用I_ANALOG_WAKE或I_EDGE_WAKE指令检测边沿,例如`I_EDGE_WAKE(GPIO_NUM, 0, 1)`检测上升沿,需在ULP汇编中定义常量;3) 在ULP循环中轮询GPIO状态,检测到边沿后执行`WAKE`指令触发唤醒;4) 为保持RTC内存数据,使用`RTC_NOINIT_ATTR`属性定义全局变量,或调用`esp_sleep_get_wakeup_cause`确认唤醒源,并利用`esp_deep_sleep_start`前的`esp_sleep_pd_config`配置RTC外设不掉电;5) 注意ULP程序需烧录到RTC慢速内存,且每次唤醒后重新加载ULP固件(除非使用`esp_deep_sleep_disable_ulp`)。实操建议:先用官方ulp_adc示例修改,测试边沿检测,再集成数据保存。
mcuku 阿沐 · 2026-08-27