Beagle bone GPIO编程
废话不说,beagle bone的GPIO编程思路如下:
1.配置GPIO:在/sys/class/gpio目录下,有一个export文件。调用这个文件可以实现配置。该文件对所有的从0开始。GPIOn_x的编号为32*n+x,例如此处用的GPIO1_6的编号为32*1+12=44。在终端输入:# echo "44" > /sys/class/gpio/export,在此回到目录/sys/class/gpio下,可以看到产生了一个新的目录./gpio44,里面包含了该IO口的输入输出设置等配置文件。注意:export文件只有root写权限,执行上述命令或者以后用C编写的可执行文件要以ROOT身份执行。不具有读的权限
2. 设置GPIO的方向(输入输出):在终端输入:# echo "out" > /sys/class/gpio/gpio44/direction,即设置该GPIO为输出。
3. 设置GPIO的输出电平:在终端输入:#echo "1" > /sys/class/gpio/gpio44/value,即设置GPIO输出高电平,输入echo "0" > /sys/class/gpio/gpio44/value设置GPIO输出低电平。
4. 关闭GPIO:在终端输入:#echo "4" > /sys/class/gpio/unexport,即删除GPIO配置文件,可以看到目录gpio38已经被删除。
程序1:直接当做普通文件读写
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> int main() { FILE *fp=NULL; int i=0; fp=fopen("/sys/class/gpio/export","w"); fprintf(fp,"%d",44);//44 is GPIO1_12 in P8 fclose(fp); fp=fopen("/sys/class/gpio/gpio44/direction","w"); fprintf(fp,"out");//set output model fclose(fp); while(i++<3) { fp=fopen("/sys/class/gpio/gpio44/value","w"); fprintf(fp,"1"); fclose(fp); sleep(1); fp=fopen("/sys/class/gpio/gpio44/value","w"); fprintf(fp,"0"); fclose(fp); sleep(1); } fp=fopen("/sys/class/gpio/unexport","w"); fprintf(fp,"44"); fclose(fp); return 1; }
程序2:直接系统调用,不过这个速度没有第一个块,因对读快了,系统反应不过来,需要加上延迟
#include <stdlib.h> int main() { int i=0; system("echo 44 > /sys/class/gpio/export"); sleep(1); system("echo out > /sys/class/gpio/gpio44/direction"); sleep(1); while(i++<3) { system("echo 1 > /sys/class/gpio/gpio44/value"); sleep(1); system("echo 0 > /sys/class/gpio/gpio44/value"); sleep(1); } system("echo 44 > /sys/class/gpio/unexport"); return 1; }