关于树莓派Pi 3B的GPIO引脚检测输入电平问题
最近在测试树莓派GPIO引脚输入。想着外面给GPIO输入高低电平,能让树莓派检测出来。折腾了很久,才解决。现在把自己遇到问题和解决办法记录下来。
官方文档:BCM2835的数据手册:https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2835/BCM2835-ARM-Peripherals.pdf
我们先看树莓派GPIO 功能框图:
起初我认为:1. 配置好引脚方向为输入方向 2. 从Pin Level Regs 取走电平值就可以了。
后来发现还少了一个重要的操作:
GPPUD寄存器是控制引脚是上拉或者下拉。但是需要与GPPUDCLK寄存器配合使用。需要GPPUDCLK配合时钟线打开。
综上所述,如果要将GPIO0配置成检测输入电平,可以如下编写代码:
*gpfsel0 &= ~( 0x7 ); //GPIO 0 input direction
*gppudclk0 |= 0x1 ; //Assert GPIO 0 clock line
*gppud &= (~0x2); //gpio pull down
*gppud |= 0x1;
以上是我遇到的问题,以及解决办法。希望和大家一起交流,同时希望得到大家的指正。