笔者今天来讲讲Linux下IO口的使用。用的硬件是三大开源器件之一的BeagleBone(狗骨头)。 (PS 三大开源器件:树莓派、Arduino和Beagle Bone) 使用的 Eclipse C/C++ 来进行操作。 在使用GPIO的时候,首先需要查看一下当前哪些IO口可以直接使用。在 /sys/class/gpio下面, 在这个目录里面就可以直接操作IO口,设置输入输出,查看当前值。 编写思路同上文讲的一样,注意的一点是操作的IO口的路径要写正确。 设置IO口 高低电平 读IO口 电平状态 使用fread函数或者fscanf函数都可以
硬件介绍
一个 HDMI D type 接口,两个扩展接口,可扩展 LCD 、 UART 、 eMMC 、 ADC 、 I2C 、 SPI 和 PWM 等接,一个 JTAG 接口( 20 pin 标准接口, 默认未焊接 连接器)
软件使用
如果不懂如何利用Eclipse操作的话,推荐看这两篇博客介绍。
Eclipse 进行Linux远程开发
Eclipse 远程Debug调试C程序
IO口的使用
引脚分配图如下:
如果要使用的IO口没有找到,则需要使用export指令将IO口导成用户可以使用的状态,这个时候就可以发现多了一个要使用的IO口的目录。
之前听到过一句很经典的话,Linux下一切皆文件,所以IO设备也当文件处理即可。1. IO口初始化
a. 首先要export对应的端口,现在用fopen fwrite函数来写入对应的端口名。
b. 设置输出还是输入模式。同样使用文件操作函数进行,写入out/in即可。//头文件定义设备路径 #ifndef _IO_H_ #define _IO_H_ #include "stdio.h" #include "string.h" #include "time.h" #include "unistd.h" #define GPIO_DIR "/sys/class/gpio/" void GPIOInit(int PinName,int InOrOut); void SetGPIO(int PinName); void ResetGPIO(int PinName); unsigned char ReadGPIO(int PinName); #endif //.c文件函数实现 void GPIOInit(int PinName,int InOrOut) //1代表输出,0代表输入 { FILE *stream = NULL; char Path[50]; char Temp[20]; stream = fopen(GPIO_DIR"export","w"); sprintf(Temp,"%d",PinName); fwrite(Temp,sizeof(int),2,stream); fclose(stream); if(InOrOut==1) { sprintf(Path,"%s%s%d%s",GPIO_DIR,"gpio",PinName,"/direction"); stream = fopen(Path,"r+"); //已存在文件并且可以读写 fwrite("out",sizeof(char),3,stream); fclose(stream); } else { sprintf(Path,"%s%s%d%s",GPIO_DIR,"gpio",PinName,"/direction"); stream = fopen(Path,"w+"); //新建文件并且读写 fwrite("in",sizeof(char),2,stream); fclose(stream); } }
2. IO口输出
void SetGPIO(int PinName) { FILE *stream = NULL; char Path[50]; sprintf(Path,"%s%s%d%s",GPIO_DIR,"gpio",PinName,"/value"); stream = fopen(Path,"w+"); fwrite("1",sizeof(char),1,stream); printf("Onn"); fclose(stream); } void ResetGPIO(int PinName) { FILE *stream = NULL; char Path[50]; sprintf(Path,"%s%s%d%s",GPIO_DIR,"gpio",PinName,"/value"); stream = fopen(Path,"w+"); fwrite("0",sizeof(char),1,stream); //设置GPIO高低电平 printf("Offn"); fclose(stream); }
3. IO口输入
unsigned char ReadGPIO(int PinName) { FILE *stream = NULL; char Path[50]; char Temp; sprintf(Path,"%s%s%d%s",GPIO_DIR,"gpio",PinName,"/value"); stream = fopen(Path,"w+"); //w+,新建文件并且读写,r+存在文件,且读写 //fscanf(stream,"%s",Temp); fread(&Temp,sizeof(char),1,stream); //扫描或者读端口数据都可以 fclose(stream); return Temp; }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算