1.首先查看系统中有没有 “/sys/class/gpio” 这个文件夹。如果没有请在编译内核的时候通过make menuconfig加入。
Device Drivers ->
GPIO Support ->
/sys/class/gpio/… (sysfs interface)。
2./sys/class/gpio 的使用说明
如果是在已经适配好的 Linux 内核上,那么相信已经有了完成的 gpiochip,可以在用户空间 /sys/class/gpio 目录下看到如下文件:
export
gpiochip0/
gpiochip32/
gpiochip64/
gpiochip96/
unexport
export:用于通知系统需要导出控制的GPIO引脚编号,导出成功会出现 gpio*,如下的gpio62
root@NanoPi2:~/Documents# echo 62 > /sys/class/gpio/export
root@NanoPi2:~/Documents# ls /sys/class/gpio/
export gpiochip0 gpiochip160 gpiochip64 unexport
gpio62 gpiochip128 gpiochip32 gpiochip96
导出失败:
说明引脚被占用:
此时GPIO258引脚被hdmi-power引脚占用。
查看设备树中hdmi-power引脚的使用,如果未使用到,将其删除。
echo 258 > /sys/class/gpio/export
删除后再次编译烧录可以成功导出。
unexport:用于通知系统取消导出,相应的gpio* 消失
echo 62 > /sys/class/gpio/unexport
gpiochipx : gpio各group的信息,如下
root@NanoPi2:~/Documents# ls /sys/class/gpio/gpiochip0
base device label ngpio power subsystem uevent
- base :引脚的起始编号
- label:寄存器名称
- ngpio: 引脚总数
3.编写shell脚本控制gpio的高低电平
#!/bin/sh
# ['I'-'A'] = 8
# PI2=32*8+2=258
if [ -e /sys/class/gpio/gpio258 ]; then
exit
else
echo 258 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio258/direction
while [ true ] ; do
echo 1 > /sys/class/gpio/gpio258/value
sleep 0.5
echo 0 > /sys/class/gpio/gpio258/value
sleep 0.5
done
fi
首先计算此引脚编号
引脚编号 = 控制引脚的寄存器基数 + 控制引脚寄存器位数
GPIOI_2 PI2=32*8+2=258
4.测量引脚波形输出。