Linux下C语言编程(1):IO编程「建议收藏」

Linux下C语言编程(1):IO编程「建议收藏」Linux下C语言编程(1):IO编程

大家好,又见面了,我是你们的朋友全栈君。

  笔者今天来讲讲Linux下IO口的使用。用的硬件是三大开源器件之一的BeagleBone(狗骨头)。

(PS 三大开源器件:树莓派、Arduino和Beagle Bone

在这里插入图片描述

硬件介绍

  1. TI公司的AM3358 集成 1G MHz ARM Cortex™ A8 内核,
  2. 4GB eMMC Flash 存储器
  3. 512MB DDR3 SDRAM 存储器,
  4. 集成 NEON™ SIMD 协处理器,集成 SGX 530 图形 引擎,集成可编程实时单元子系统,集成 32KB 指令缓存 和 32KB 数据缓存 ,支持奇偶校验,集成 256KB 二级缓存,支持错误校验码
  5. 一个 HDMI D type 接口( 16 位色输出,支持音频输出),一个 10/100M 以太网接口( RJ45 连接器),一个集成了 PHY 的高速 USB 2.0 OTG 接口( Mini USB B 型连接器),一个集成了 PHY 的高速 USB 2.0 HOST 接口( USB A 型连接器),一个 TF 卡接口(兼容 SD/MMC,一个 3 线调试串口( 6 pin 2.54 间距连接器)
    一个 HDMI D type 接口,两个扩展接口,可扩展 LCD 、 UART 、 eMMC 、 ADC 、 I2C 、 SPI 和 PWM 等接,一个 JTAG 接口( 20 pin 标准接口, 默认未焊接 连接器)
    在这里插入图片描述

软件使用

使用的 Eclipse C/C++ 来进行操作。
如果不懂如何利用Eclipse操作的话,推荐看这两篇博客介绍。
Eclipse 进行Linux远程开发
Eclipse 远程Debug调试C程序
在这里插入图片描述

IO口的使用

  在使用GPIO的时候,首先需要查看一下当前哪些IO口可以直接使用。在 /sys/class/gpio下面,
在这里插入图片描述
  引脚分配图如下:
在这里插入图片描述
  如果要使用的IO口没有找到,则需要使用export指令将IO口导成用户可以使用的状态,这个时候就可以发现多了一个要使用的IO口的目录。

  在这个目录里面就可以直接操作IO口设置输入输出,查看当前值。
在这里插入图片描述
在这里插入图片描述
  之前听到过一句很经典的话,Linux下一切皆文件,所以IO设备也当文件处理即可。

1. IO口初始化

  编写思路同上文讲的一样,注意的一点是操作的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口输出

  通过fwrite函数对IO设备文件写入1或者0,即可设置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("On\n");
	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("Off\n");
	fclose(stream);
}

3. IO口输入

  读IO口 电平状态 使用fread函数或者fscanf函数都可以

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;

}

下一篇博文: Linux下C语言编程(2):ADC编程

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133457.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【前端资讯】React v16.6 发布[通俗易懂]

    【前端资讯】React v16.6 发布[通俗易懂]【前端资讯】React v16.6 发布

    2022年4月20日
    36
  • python控制运算的优先顺序(python控制电脑桌面软件)

    Python控制odrive紧接着上一篇文章,来分享一下我的应用过程。先说结论,python编程odrive其实只要写上你之前在odrivetool下的调试命令就行了目前我还只是一个菜鸡,对很多技术都不熟悉或者只知道表面。我也是边做变成长,有哪些不到位的地方可以友善交流。最初的疑惑python也是我最近才开始学习的语言,它可以是一门交互式的语言,如果你知道这一点,那么就知道odrivetool其实就是这样子,你输入命令行然后执行。所以,如果你想控制odrive,只要在python代码中写上诸如o

    2022年4月17日
    60
  • 十款很不错的磁盘碎片整理工具「建议收藏」

    十款很不错的磁盘碎片整理工具「建议收藏」
    说到磁盘整理工具,应该说说磁盘碎片的定义,为什么磁盘碎片会对系统性能造成影响。首先我不是专业的电脑人员,对很专业的理论知识不懂,在这里只可以用很通俗很日常的语言来表达。其实磁盘碎片应该称为文件碎片,是因为文件被分散保存到整个磁盘的不同地方,而不是连续地保存在磁盘连续的簇中形成的。为什么这些碎片多了,会对系统性能造成影响呢?打个比方,你的房间你很久没有整理和清洁了,原本有条不紊的东西变得乱七八糟,你找起东西来自然不方便,耗时间。系统读取硬盘数据也一样,硬盘数据琐碎散落,系统读取起来就

    2022年6月25日
    203
  • 四周第三次课(4月13日)

    四周第三次课(4月13日)

    2022年4月2日
    41
  • 100+个Java项目视频教程+源码+笔记,项目经验不用愁了!

    100+个Java项目视频教程+源码+笔记,项目经验不用愁了!有很多朋友问我,说有没有项目可以分享,最近整理了一些项目,现在分享给大家,希望能帮助大家积累一些项目方面的经验。开源项目分享1、微信小程序开发【前端+后端(Java)】附完整源码地址:微信小程序开发【前端+后端(Java)】附完整源码2、springboot+vue.js搭建图书管理系统开源项目地址:springboot+vue.js搭建图书管理系统开源项目3、仿百度网盘的一款轻量级微服务架构网盘系统地址:仿百度网盘的一款轻量级微服务架构网盘系统4、仿京东电商项目终于开源了~项目经验不愁喽!

    2022年9月27日
    0
  • Linux下安装Tomcat 10

    Linux下安装Tomcat 10(Linux)Deepin下安装Tomcat101)在官网下载tar.gz包2)解压到目录(这里‘用户名’换成你自己的)sudotar-zxvf/home/用户名/Downloads/apache-tomcat-10.0.0.tar.gz-C/usr/local3)重命名sudomv/usr/local/apache-tomcat-10.0.0/usr/local/Tomcat4)测试sudo/usr/local/Tomcat/bin/startup.sh若失败则

    2022年6月2日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号