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;
}