在ESP32低功耗模式下,ULP协处理器是唯一能在深度睡眠中运行的CPU,可独立执行GPIO边沿检测。实现步骤:1) 配置RTC GPIO(如GPIO_NUM_4)为输入,启用上拉/下拉,并设置ULP程序通过RTC_GPIO寄存器读取状态,用状态变化触发中断(需在ULP代码中轮询或使用RTC_IO的边沿检测寄存器)。2) 使用RTC_SLOW_MEM存储检测标志和计数,该内存段在深度睡眠中保持数据,通过ulp_set_wakeup_period设置唤醒周期,ULP检测到边沿后置位标志并唤醒主CPU。3) 主CPU唤醒后读取RTC_SLOW_MEM中的标志,处理完需清零。注意:ULP无法直接访问普通GPIO,必须用RTC GPIO;边沿检测需在ULP循环中比较当前与上次电平,避免漏检;RTC内存写入需使用volatile指针。实操建议:先用ulp-riscv工具链编写ULP程序,用esp_sleep_enable_ulp_wakeup()使能唤醒,并在主程序中用esp_sleep_get_wakeup_cause()区分唤醒源。
mcuku 阿沐 · 2026-08-27