You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在树莓派Pico的C语言中为单个引脚设置两个独立回调函数

GPIO上升沿/下降沿分别触发独立回调的正确实现

你的代码无法正常工作的核心原因是:同一个GPIO引脚只能绑定一个中断回调函数。第二次调用gpio_set_irq_enabled_with_callback会直接覆盖第一次设置的回调,最终不管是上升沿还是下降沿触发中断,只会执行ThisIsCallBack2。

要实现两种边沿分别调用独立函数的需求,正确的做法是先绑定一个统一的中断回调,在回调内部根据触发的边沿类型,分别调用对应的处理函数。

实现步骤与代码示例

  1. 定义各自的边沿处理函数
// 上升沿处理逻辑
void ThisIsCallBack1() {
    // 写入你的上升沿处理代码
}

// 下降沿处理逻辑
void ThisIsCallBack2() {
    // 写入你的下降沿处理代码
}
  1. 编写统一的中断回调函数,判断边沿类型并分发调用
void unified_gpio_callback(uint gpio, uint32_t events) {
    // 检查是否是上升沿触发
    if (events & GPIO_IRQ_EDGE_RISE) {
        ThisIsCallBack1();
    }
    // 检查是否是下降沿触发
    if (events & GPIO_IRQ_EDGE_FALL) {
        ThisIsCallBack2();
    }
}
  1. 初始化GPIO中断,同时启用两种边沿检测并绑定统一回调
// 同时监听GPIO2的上升沿和下降沿中断
gpio_set_irq_enabled_with_callback(2, GPIO_IRQ_EDGE_RISE | GPIO_IRQ_EDGE_FALL, true, &unified_gpio_callback);

额外注意事项

  • 确保GPIO引脚已正确配置为输入模式(比如设置上拉/下拉电阻),避免电平抖动导致误触发。
  • 如果需要处理抖动,可在回调中加入软件消抖逻辑,或者使用硬件消抖电路。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:01:00