在ESP32低功耗模式下,ULP协处理器可在深度睡眠时运行,实现GPIO边沿触发并保持RTC内存数据。首先,配置GPIO为输入并启用RTC GPIO功能(如GPIO_NUM_4),使用rtc_gpio_pullup_en和rtc_gpio_pulldown_dis设置上下拉。然后,在ULP程序中,通过RTC_GPIO寄存器(如RTC_GPIO_IN_REG)读取引脚状态,并检测边沿变化(比较当前值与上次值)。触发后,将数据写入RTC内存(如RTC_DATA_ATTR变量),并调用esp_sleep_get_wakeup_cause确认唤醒源。注意:ULP程序需用汇编或C(通过ulp_riscv工具链)编写,编译后加载到RTC慢速内存。深度睡眠前,调用esp_sleep_enable_ulp_wakeup()使能ULP唤醒。确保RTC内存数据在睡眠期间不被清除,需使用RTC_DATA_ATTR或RTC_NOINIT_ATTR属性。实操建议:先用ESP-IDF的ulp示例(如ulp_edge_wakeup)为基础,逐步修改。
mcuku 阿沐 · 2026-08-27