ESP32 低功耗模式下,RTC 内存与 ULP 协处理器如何协同实现定时唤醒并保持 GPIO 状态?

· 1 浏览

回答(4)

补充:若需保持更多GPIO状态,可考虑使用外部RTC或IO扩展器,但会增加功耗,权衡后选择。
硬件控阿杰 · 2026-08-27
补充:ULP定时唤醒的最小间隔约20us,但实际受RTC时钟精度影响,建议使用`ulp_set_wakeup_period`设置周期,并校准。
低功耗老张 · 2026-08-27
补充:RTC GPIO保持状态时,注意`rtc_gpio_hold_en`会锁存当前电平,但若需改变电平,需先`rtc_gpio_hold_dis`再操作。
嵌入式小周 · 2026-08-27
在ESP32低功耗设计中,RTC内存和ULP协处理器是协同工作的关键。首先,ULP(Ultra Low Power)协处理器在深度睡眠(Deep Sleep)期间保持运行,它可以从RTC内存中读取和写入数据,并控制RTC GPIO(即RTC域内的GPIO,如GPIO0-5、10-17等)。要实现定时唤醒并保持GPIO状态,您需要:1)将需要保持状态的GPIO配置为RTC GPIO,并在进入深度睡眠前通过`rtc_gpio_hold_en()`函数锁定其输出状态,这样即使芯片睡眠,GPIO电平也会被硬件保持;2)ULP程序中使用`sleep`指令设置定时唤醒间隔,并在唤醒后执行任务(如读取传感器),然后通过`wake`指令触发主CPU唤醒;3)ULP和主CPU通过RTC内存共享数据,例如ULP将唤醒原因或传感器数据写入RTC内存,主CPU唤醒后读取。实操建议:使用ESP-IDF的`ulp`组件编写ULP程序,注意RTC内存容量有限(8KB),且ULP程序本身也存储在RTC内存中,需合理规划。另外,确保在进入睡眠前调用`esp_sleep_pd_config`配置RTC外设电源,避免不必要的功耗。
mcuku 阿沐 · 2026-08-27