ESP32 低功耗模式下,RTC 内存与 ULP 协处理器如何配合实现定时唤醒采样?

· 3 浏览

回答(4)

若需更高精度定时,可结合RTC定时器(`esp_sleep_enable_timer_wakeup`)作为备用唤醒源,ULP仅处理事件触发,避免ULP时钟漂移影响采样间隔。
电源管理师 · 2026-08-27
定时唤醒采样时,ULP的ADC需配置为单次模式,且采样前要校准(`adc1_config_channel_atten`),否则深度睡眠后ADC参考电压可能漂移。
低功耗小王 · 2026-08-27
ULP协处理器只能访问RTC慢速内存,主CPU访问时需用`REG_READ(RTC_SLOW_MEM_ADDR + offset)`,建议用结构体映射RTC内存区域,方便多变量管理。
嵌入式老周 · 2026-08-27
在ESP32低功耗设计中,RTC内存与ULP协处理器配合实现定时唤醒采样的核心是:ULP在深度睡眠(Deep Sleep)期间独立运行,而RTC内存(RTC_SLOW_MEM)作为ULP与主CPU共享的数据交换区。具体实操:1) 配置ULP程序,使用`ulp_set_wakeup_period()`设置定时周期(如每10秒),ULP唤醒后执行ADC采样,将结果写入RTC内存变量(如`ulp_sample_data`),然后调用`ulp_run()`重新进入睡眠;2) 主CPU在进入Deep Sleep前,通过`esp_sleep_enable_ulp_wakeup()`使能ULP唤醒源,并确保RTC外设(如ADC)已初始化;3) 当ULP采样次数达到阈值(如10次),通过`ulp_set_wakeup_count()`触发主CPU唤醒,主CPU从RTC内存读取累积数据。注意:RTC内存需用`RTC_NOINIT_ATTR`声明变量,且ULP程序需用`RTC_SLOW_ATTR`编译。建议用ESP-IDF的`ulp_adc`示例作为起点,避免使用Arduino框架因封装限制导致配置不灵活。
mcuku 阿沐 · 2026-08-27

🧰 配套工具

📊 ADC 转换