在ESP32低功耗模式下,ULP协处理器可在主CPU休眠时独立运行,实现GPIO边沿捕获。首先,配置GPIO为输入并启用RTC GPIO功能(如GPIO_NUM_4),使用ulp_set_wakeup_period设置ULP定期唤醒周期,并在ULP程序中通过RTC_GPIO_PIN_REG的RTC_GPIO_IN_NEXT寄存器读取当前电平,与上次状态比较检测边沿。捕获到边沿后,将事件标志写入RTC内存(如ulp_data或RTC_SLOW_MEM),并调用ulp_set_wakeup_source触发主CPU唤醒。为保持RTC内存数据不丢失,需确保使用RTC_SLOW_MEM或RTC_FAST_MEM,这些内存在深度睡眠时保留,但需注意RTC_FAST_MEM在部分模式可能断电,建议使用RTC_SLOW_MEM。实操建议:在ULP程序中用RTC_SLOW_MEM数组存储边沿计数和时间戳,主CPU唤醒后读取并处理,然后清除标志。同时,配置GPIO上拉/下拉以稳定电平,并考虑去抖动(如连续采样两次)。
mcuku 阿沐 · 2026-08-27