You need to enable JavaScript to run this app. ESP32 ULP协处理器异常:定时唤醒失效、GPIO回升后LED不亮
优惠活动
大模型
产品
解决方案
定价
更多

ESP32 ULP协处理器异常:定时唤醒失效、GPIO回升后LED不亮

ULP GPIO监测异常修复方案

问题现象

GPIO持续为高电平时,ESP32可正常被ULP唤醒,LED可正常点亮;GPIO拉低后再次回升至高电平,LED无响应,主CPU不再被唤醒。

核心问题点

  • 输入引脚缺少RTC功能配置:仅对输出LED的RTC GPIO6配置了MUX选择,未对输入GPIO14做对应配置。主CPU进入深睡眠后,主GPIO外设断电,GPIO14的输入缓冲默认关闭,ULP持续采样到低电平,无法识别回升的高电平。
  • 输出寄存器位宏误用:LED_On操作中,置位输出寄存器RTC_GPIO_OUT_W1TS_REG错误使用了RTC_GPIO_OUT_DATA_W1TC_S位偏移宏,虽当前两者偏移均为0,属于隐性错误,易引发引脚输出错位。
  • 注释与代码不匹配:输入引脚配置注释写为GPIO13,实际定义为GPIO14,易引发后续维护错误。

修复步骤

  1. 补充输入引脚的RTC配置
    在ulp.S的entry段GPIO配置部分,添加GPIO14的功能选择和输入缓冲使能,修正注释:
// 原有LED配置保持不变
WRITE_RTC_REG(RTC_IO_PAD_DAC1_REG, RTC_IO_PDAC1_MUX_SEL_S, 1, 1)
WRITE_RTC_REG(RTC_GPIO_ENABLE_W1TS_REG, RTC_GPIO_ENABLE_W1TS_S + LED, 1, 1)

// 新增输入GPIO14的RTC配置
WRITE_RTC_REG(RTC_IO_PAD_GPIO14_REG, RTC_IO_PAD14_MUX_SEL_S, 1, 1)
WRITE_RTC_REG(RTC_IO_PAD_GPIO14_REG, RTC_IO_PAD14_TIE_S, 1, 1)

// 修正注释
// Set GPIO 14 as input
WRITE_RTC_REG(RTC_GPIO_ENABLE_W1TC_REG, RTC_GPIO_ENABLE_W1TC_S + INPUT, 1, 1)
  1. 修正LED输出的位宏匹配
    将LED_On中错误的位偏移宏改为W1TS对应宏:
LED_On:
    WRITE_RTC_REG(RTC_GPIO_OUT_W1TS_REG, RTC_GPIO_OUT_DATA_W1TS_S + LED, 1, 1)
    move r1, 5000
    move r2, WakeUp
    jump Delay_ms
  1. (可选)优化深睡眠时序
    主CPU调用ulp_run后添加10ms延时,确保ULP完成定时器使能、GPIO配置后再进入深睡眠:
ESP_ERROR_CHECK_WITHOUT_ABORT(ulp_run(&ulp_entry - RTC_SLOW_MEM));
// 等待ULP完成基础初始化
vTaskDelay(pdMS_TO_TICKS(10));
DEBUG_INFO("Enter deep sleep...\n");
ESP_ERROR_CHECK_WITHOUT_ABORT(esp_sleep_enable_ulp_wakeup());
esp_deep_sleep_start();

内容的提问来源于stack exchange,提问作者Kampi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.30 22:36:03