关于树莓派Pi 3B的GPIO引脚检测输入电平问题

最近在测试树莓派GPIO引脚输入。想着外面给GPIO输入高低电平,能让树莓派检测出来。折腾了很久,才解决。现在把自己遇到问题和解决办法记录下来。

官方文档:BCM2835的数据手册:https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2835/BCM2835-ARM-Peripherals.pdf

我们先看树莓派GPIO 功能框图:

关于树莓派Pi 3B的GPIO引脚检测输入电平问题_第1张图片

起初我认为:1. 配置好引脚方向为输入方向 2. 从Pin Level Regs 取走电平值就可以了。

后来发现还少了一个重要的操作:

关于树莓派Pi 3B的GPIO引脚检测输入电平问题_第2张图片

关于树莓派Pi 3B的GPIO引脚检测输入电平问题_第3张图片

GPPUD寄存器是控制引脚是上拉或者下拉。但是需要与GPPUDCLK寄存器配合使用。需要GPPUDCLK配合时钟线打开。

综上所述,如果要将GPIO0配置成检测输入电平,可以如下编写代码:

	*gpfsel0   &= ~( 0x7 );     //GPIO 0 input direction
	*gppudclk0 |=  0x1 ;        //Assert GPIO 0 clock line
	*gppud     &=  (~0x2);      //gpio pull down
	*gppud     |=  0x1;

以上是我遇到的问题,以及解决办法。希望和大家一起交流,同时希望得到大家的指正。

你可能感兴趣的:(关于树莓派Pi 3B的GPIO引脚检测输入电平问题)