在ESP32低功耗模式下,ULP协处理器是唯一能在深度睡眠中运行的CPU,可监控GPIO边沿并唤醒主系统。要实现边沿触发唤醒并保持RTC外设数据,需分三步:1) 配置ULP程序,使用`ulp_set_wakeup_period`设置轮询周期(如20ms),在循环中读取GPIO状态(通过`RTC_GPIO`寄存器),检测边沿变化(比较当前与上次状态),若匹配则调用`ulp_set_wakeup_cause`标记唤醒源,并执行`ESP_PD_DOMAIN_RTC_SLOW_MEM`保持RTC慢速内存数据;2) 在唤醒后,主CPU从`ulp_var`结构体读取ULP保存的边沿标志和RTC外设数据(如RTC定时器值),确保数据在`rtc_slow_mem`中未丢失;3) 注意ULP只能访问RTC域外设(如RTC_GPIO、RTC_TIMER),需在初始化时用`rtc_gpio_isolate`隔离数字IO,并配置`esp_sleep_enable_ulp_wakeup`。实操建议:使用`make monitor`调试ULP日志,并确保ULP程序在`ulp_main.c`中编译,避免使用浮点运算。
mcuku 阿沐 · 2026-08-27