乐鑫技术交流
直播中

凌流浪

8年用户 1024经验值
擅长:可编程逻辑 电源/新能源
私信 关注
[问答]

ESP32-C3浅休眠时中断一直触发是怎么回事?

目前在用ESP32-C3,用BLE 低功耗后 要启用自动浅休眠,开启了浅休眠之后GPIO 中断一直不停触发,不管在设置里面内部上拉 还是外部47K上拉。
我确定已经去抖动了,在中断里面解绑了中断,等中断服务结束之后重新绑定的中断。在中断里才会增加的变量也一直在增加,不开自动浅休眠就没这个问题,请问有人知道是什么情况吗

  • io_conf.mode = GPIO_MODE_INPUT;
  • io_conf.intr_type = GPIO_INTR_POSEDGE;
  • io_conf.pin_bit_mask = GPIO_INPUT_PIN_SEL;
  • io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
  • io_conf.pull_up_en = GPIO_PULLUP_DISABLE;
  • gpio_config(&io_conf);
  • // change gpio intrrupt type for one pin
  • gpio_set_intr_type(GPIO_NUM_10, GPIO_INTR_ANYEDGE);
  • // //install gpio isr service
  • gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT);
  • // // //hook isr handler for specific gpio pin again
  • gpio_isr_handler_add(GPIO_NUM_10, lock_isr_handler, (void *)GPIO_NUM_10);

  • void lock_isr_handler(void *arg)
  • {
  •     is_reporting++;
  •     gpio_isr_handler_remove(GPIO_NUM_10);
  •     uint8_t event = event_REPORT;
  •     xQueueSend(event_Queue, &event, portMAX_DELAY);
  • }



回帖(1)

爱吃果冻

2024-6-22 15:35:40
从您的描述来看,ESP32-C3在浅休眠状态下GPIO中断一直触发的问题可能是由于以下几个原因导致的:

1. **电源问题**:确保您的电源稳定,因为不稳定的电源可能导致GPIO引脚电压波动,从而触发中断。

2. **外部干扰**:检查您的威廉希尔官方网站 周围是否有可能产生电磁干扰的设备,这些干扰可能导致GPIO引脚误触发中断。

3. **内部上拉/下拉电阻设置**:您已经尝试了内部上拉和外部47K上拉电阻,但仍然出现问题。请确保您的上拉电阻值适合您的应用场景。

4. **去抖动处理**:您提到已经进行了去抖动处理,但请确保去抖动逻辑正确实现。例如,您可以在检测到上升沿后等待一小段时间(例如10ms),然后再检查GPIO状态,以确保这是有效的触发。

5. **中断服务程序(ISR)实现**:请检查您的ISR实现,确保在ISR中正确地处理了中断,并在退出ISR之前重新启用中断。

6. **硬件问题**:如果以上方法都不能解决问题,可能是ESP32-C3硬件本身存在问题。您可以尝试更换一个ESP32-C3模块,看看问题是否仍然存在。

7. **软件问题**:检查您的ESP-IDF版本是否为最新,或者是否有已知的bug。尝试升级ESP-IDF到最新版本,看看问题是否得到解决。

8. **GPIO配置**:您提供的代码片段中,`GPIO_INPUT_PIN_SEL`可能需要替换为实际的GPIO引脚号。例如,如果您使用的是GPIO 0,则应将其替换为`(1ULL<<0)`。

综上所述,您可以逐一排查这些可能的原因,以找到导致GPIO中断一直触发的问题所在。希望这些信息对您有所帮助!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分