BBB板第七课:GPIO编程控制
在一上课我们通过IO函数做了简单的GPIO端口输出高低电平输出,实现对一个LED指示灯的点亮和关闭控制,本节将通过完整的C++程序,实现第四课Shell脚本的全部功能,实现两个LED指示灯的交替闪亮。
直接通过进入功能程序
1、实现echo 44 > export 打开端口功能
上一课简单测试中,通过手工在BBB板终端模式下打开gpio44端口可通过以下程序实现:
#include <stdio.h>
#define GPIO_DIR "/sys/class/gpio/" /*GPIO主目录*/
int main()
{
FILE *stream=NULL;
stream=fopen(GPIO_DIR"gpio44/direction","r+");
if (stream==NULL) /*如果打开文件失败则打开相应端口*/
{
stream=fopen(GPIO_DIR"export","w"); /*export打开只能选择w模式*/
fwrite("44",sizeof(int),2,stream);
fclose(stream);
stream=fopen(GPIO_DIR"gpio44/direction","r+"); /*重新打开文件*/
}
}
可以先编译和执行这一段代码,然后在gpio目录下查看gpio44 是不是已经打开了。
这里面关于“export”文件为什么只能用w模式,可以 ls –all列表下文件,就可以发现左侧的运行模式为-w-----,只有一个w可选,我原来没注意,用了r或r+等模式,老是没能打开gpio44端口,找了很久原因才发现是这个问题。
前车之鉴,希望大家不要走那么多弯路。
2、实现echo 44 > unexport 关闭端口功能
和打开端口操作一样,只是一个文件名不同而已,因为一个好的程序打开完相应端口,在结束的时候总是得关闭掉,也算是有始有终吧。直接上代码,其他就不多说,自己试
...
stream=fopen(GPIO_DIR"unexport","w"); /*unexport打开只能选择w模式*/
fwrite("44",sizeof(int),2,stream);