You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

树莓派3 3个GPIO引脚默认高电平无法拉低,请求技术支持

解决树莓派3无法拉低特定GPIO引脚的问题

看起来你遇到的是树莓派常见的GPIO引脚被系统默认复用功能或内核模块占用的问题。从你提供的gpio readall输出看,出问题的是**BCM 17(物理11)、BCM 18(物理12)、BCM 16(物理36)**这三个引脚,我给你一步步排查和解决的方法:

1. 优先排查内核模块占用(最可能的原因)

树莓派的音频驱动snd_bcm2835默认会占用BCM18作为PWM输出(用于模拟音频),哪怕你在raspi-config里关闭了音频接口,这个模块可能依然后台加载着,直接锁定引脚电平。

  • 先临时卸载模块测试:

    sudo rmmod snd_bcm2835
    

    卸载后再尝试拉低引脚:

    gpio write GPIO.0 0
    gpio write GPIO.1 0
    gpio write GPIO.27 0
    

    运行gpio readall看电压是否变为0。如果有效,说明就是音频模块在搞鬼。

  • 永久禁用音频模块:
    创建或编辑黑名单配置文件:

    sudo nano /etc/modprobe.d/blacklist-rpi-audio.conf
    

    添加以下内容:

    blacklist snd_bcm2835
    

    保存退出后,再编辑/boot/config.txt彻底关闭音频:

    sudo nano /boot/config.txt
    

    添加或修改:

    dtparam=audio=off
    

    重启树莓派后,引脚应该能正常控制了。

2. 用sysfs直接控制验证硬件

如果上面的方法无效,我们可以绕过wiringPi,用Linux原生的sysfs接口直接操作引脚,排除工具本身的问题:
以BCM17为例:

# 导出引脚到用户空间
echo 17 | sudo tee /sys/class/gpio/export
# 设置为输出模式
echo out | sudo tee /sys/class/gpio/gpio17/direction
# 设置为低电平
echo 0 | sudo tee /sys/class/gpio/gpio17/value
# 查看当前电平值
cat /sys/class/gpio/gpio17/value

如果这里输出还是1,那就要参考BCM2835手册检查引脚的硬件复用功能,确认是否被设置为GPIO之外的其他功能。

3. 检查设备树和后台服务

  • 查看/boot/config.txt里有没有加载额外的设备树overlay,比如dtoverlay=pwmdtoverlay=i2c-rtc之类的,这些可能偷偷占用引脚。如果有,先注释掉(加#)再重启测试。
  • 检查有没有进程占用GPIO资源:
    fuser /dev/gpiomem
    
    如果输出有进程ID,用ps aux | grep <PID>查看是什么进程,停止它再测试引脚控制。

4. 强制设置引脚为普通GPIO模式

根据BCM2835手册,这三个引脚有多种复用功能,你可以用raspi-gpio命令强制设置为普通输出模式:

# 分别设置三个引脚为普通输出
raspi-gpio set 17 op
raspi-gpio set 18 op
raspi-gpio set 16 op

设置完成后再尝试拉低引脚,应该就能正常工作了。

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

火山引擎 最新活动