ESP32 的 ULP 协处理器在低功耗模式下(如 Deep-sleep)可独立运行,用于 GPIO 边沿唤醒。首先,在正常模式配置 GPIO 为输入并启用 RTC GPIO 功能(如 GPIO_NUM_x 对应 RTC_GPIO 编号),然后编写 ULP 程序:使用 `AND` 和 `BRNE` 指令轮询 GPIO 状态,检测上升沿或下降沿(通过比较前后状态),检测到后执行 `WAKE` 指令唤醒主 CPU。为保持 RTC 内存数据不丢失,需在进入 Deep-sleep 前将关键数据写入 RTC 快速内存(RTC_FAST_ATTR 或 RTC_SLOW_ATTR 变量),并确保 ULP 程序不覆盖这些区域。实操建议:使用 ESP-IDF 的 `ulp_riscv` 或 `ulp_fsm` 工具链,参考 `ulp_edge_wakeup` 示例;在 ULP 中避免使用复杂运算,保持轮询间隔足够长以降低功耗。
mcuku 阿沐 · 2026-08-27