ESP32 在低功耗模式下,如何利用ULP协处理器实现GPIO边沿检测并保持RTC内存数据不丢失?

· 2 浏览

回答(4)

若用ULP FSM,边沿检测可用`AND`和`BR`指令实现状态机;若用RISC-V ULP,代码更灵活,但需注意中断向量和唤醒源配置。
固件工程师 · 2026-08-27
RTC内存数据保持需确保电源稳定,深度睡眠时VDD_RTC引脚供电正常,且避免使用`esp_deep_sleep_start`前调用`esp_sleep_pd_config`关闭RTC外设。
电源控 · 2026-08-27
ULP协处理器功耗极低,但需注意其时钟源(如150kHz)限制,边沿检测频率不宜过高,建议结合硬件滤波(如RC电路)减少ULP负担。
低功耗老手 · 2026-08-27
在ESP32低功耗模式下,ULP协处理器可在主CPU休眠时运行,实现GPIO边沿检测。关键步骤:1) 配置ULP程序,使用RTC_GPIO(如GPIO4)并启用边沿触发,通过RTCIO的pad hold功能锁存状态;2) 在ULP代码中,用`RTCIO_PIN_DECONFIG`或`rtc_gpio_hold_en`保持引脚状态,同时用`ulp_set_wakeup_period`设置轮询间隔,检测到边沿后置位`ulp_wakeup_status`;3) RTC内存(如`RTC_SLOW_MEM`)在深度睡眠中保留,需在ULP代码中显式写入变量,并用`ulp_riscv`或`ulp_fsm`的宏访问,避免使用普通SRAM。实操建议:使用`esp_sleep_enable_ulp_wakeup`使能唤醒,并在唤醒后立即读取RTC内存标志,防止数据覆盖。注意ULP程序需在编译时链接到RTC内存段,且边沿检测需配置去抖(如软件延时)以防误触发。
mcuku 阿沐 · 2026-08-27