MinnowBoard Turbot/Max GPIO使用

来源:互联网 发布:如何防范网络恐怖 编辑:程序博客网 时间:2024/06/09 20:10

硬件环境:MinnowBoard Turbot(英特尔嵌入式大赛指定开发板)

软件环境:Linux MinnowBoard 4.2.0-27-generic #32~14.04.1-Ubuntu(内核版本:4.2.0,Ubuntu14.04)


注意:根据官方WIKI上讲的,在内核版本为3.18之后才有gpio对应的驱动,所以本文只对应内核版本>=3.18的系统,

如果板子的内核版本太低,可网上检索相关升级方法。

关于GPIO的使用:网上有很多开源的库,但大多是要用Python的,还有些事在Windows平台上的,所以在Linux上用C控制IO口的文章很少。

板子的IO口排列如图:



控制原理:以文件写入的方式控制Linux"/sys"下的设备类。

命令行控制IO:

经过下面的过程编号为GPIO_0的IO口将输出高电平(必须以root身份运行)

cd /sys/class/gpiosu rootecho 338 > exportecho out > gpio338/directionecho 1 > gpio338/value


在了解了控制原理后,我们就可以写一个简单的控制LED闪烁的小程序;

硬件连接如图:


源代码:

#include "stdio.h"#include "stdlib.h"#include "unistd.h"#define GPIO_EXPORT "/sys/class/gpio/export"#define GPIO_338_DIR "/sys/class/gpio/gpio338/direction"#define GPIO_339_DIR "/sys/class/gpio/gpio339/direction"#define GPIO_338_VALUE "/sys/class/gpio/gpio338/value"#define GPIO_339_VALUE "/sys/class/gpio/gpio339/value"static char* gpio338 = "338";static char* gpio339 = "339";static char* gpioOut = "out";static char* gpioH = "1";static char* gpioL = "0";static FILE *gpioFd1;static FILE *gpioFd2;void gpioInit(){FILE *gpioDir1;FILE *gpioDir2;FILE *gpioExport; gpioExport = fopen(GPIO_EXPORT,"w");if(gpioExport == NULL){printf("Please run as root!\n");exit(0);}fwrite(gpio338,sizeof(gpio338),1,gpioExport);fwrite(gpio339,sizeof(gpio339),1,gpioExport);gpioDir1 = fopen(GPIO_338_DIR,"w");gpioDir2 = fopen(GPIO_339_DIR,"w");gpioFd1= fopen(GPIO_338_VALUE,"w");gpioFd2= fopen(GPIO_339_VALUE,"w");fwrite(gpioOut,sizeof(gpioOut),1,gpioDir1);fwrite(gpioOut,sizeof(gpioOut),1,gpioDir2);}void gpioSet(unsigned int io,char* value){if(io == 1){fseek(gpioFd1,0L,SEEK_SET);fwrite(value,sizeof(value),1,gpioFd1);}else if(io == 2){fseek(gpioFd2,0L,SEEK_SET);fwrite(value,sizeof(value),1,gpioFd2);}else{}}int main(){gpioInit();while(1){gpioSet(1,gpioH);usleep(500000);gpioSet(1,gpioL);usleep(500000);}return 0;}


编译运行后,会看到LED的闪烁。

因为我的作品中只用到了两个IO口,所以没有写一些通用的代码,但可以在此基础上根据你的需求来扩展。

0 0
原创粉丝点击