news 2026/5/10 16:58:14

全志模块设备开发之GPIO编程基础介绍(1)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
全志模块设备开发之GPIO编程基础介绍(1)

1. GPIO编程基础介绍

GPIO(General-Purpose IO Ports),即通用IO接口。GPIO的使用较为简单,主要分为输入和输出两种功能。GPIO主要用于实现一些简单设备的控制。在作为输入型GPIO的情况下,可以将该IO连接外部按键或者传感器,用于检测外部状态;当作为输出时,则可以通过输出高低电平来控制外部设备的运转。

由于GPIO的功能多种多样,需要首先将引脚设置为GPIO。设置为GPIO之后,我们需要设置GPIO的方向。当设置为输出时,可以控制输出高电平或者低电平;当设置为输入时,可以读取GPIO的电平来判断外部输入电平的高低。

2. GPIO编程软件接口

GPIO编程有多种实现方式,在这里,我们通过sysfs方式来实现GPIO的控制实现。

​如果要通过sysfs方式控制gpio,首先需要底层内核的支持。为了实现内核对sysfs gpio的支持,我们需要在内核中进行设置。在编译内核的时候,加入“Device Drivers-> GPIO Support ->/sys/class/gpio/… (sysfs interface)”。作为GPIO的引脚,不允许在内核中被用作其它用途。

​在系统正常运行之后,我们可以在/sys/class/gpio下看到sysfs控制相关的接口。有三种类型的接口, 分别是控制接口GPIO信号GPIO控制器三种接口。这部分的具体介绍可参考《kernel/Documentation/gpio/sysfs.txt》。

(1)控制接口

控制接口用于实现在用户空间对GPIO的控制,主要包括“/sys/class/gpio/export”“/sys/class/gpio/unexport”两个接口。这两个控制接口都是只写的,/sys/class/gpio/export实现将GPIO控制从内核空间导出到用户空间,/sys/class/gpio/unexport用于实现取消GPIO控制从内核空间到用户空间的导出

​下面以引脚编号为19的GPIO为例进行说明,在/sys/class/gpio/目录下,执行"echo 19 > export"之后,将会产生一个”gpio19”节点来控制引脚编号为19的GPIO;执行"echo 19 > unexport"之后,将会删除之前通过export产生的”gpio19”节点。为了使用gpio,我们需要首先使用/sys/class/gpio/export导出gpio引脚编号。完成使用之后,通过/sys/class/gpio/unexport删除掉之前导出的gpio引脚。

(2)GPIO信号

GPIO信号,即为GPIO本身,其路径为/sys/class/gpio/gpioN/,拥有多个属性。通过对这些属性进行控制,就可以实现对GPIO的控制。

  • “direction”属性

读取的值为“in”或者“out”。通过对该属性写入“in”或者“out”可以设置该GPIO为输入或者输出。如果直接写入“out”,则会使GPIO直接输出低电平。也可以通过写入“low”或者“high”来直接设置输出低电平或者高电平

  • “value”属性

用于读取输入电平或者控制输出电平。如果GPIO为输出,则对value写入0为输出低电平,写入非0为输出高电平;如果设置为输入的话,则读到0表示输入为低电平,1为高电平。

  • “edge”属性

用于设置触发电平,只有在GPIO可以设置为中断输入引脚时才会出现该属性。

(3)GPIO控制器

GPIO控制器,用于表示GPIO控制实现的初始GPIO,其路径为/sys/class/gpio/gpiochipN/。比如/sys/class/gpio/gpiochip42/ 则表示实现GPIO控制器的初始化编号为42。GPIO控制器的属性为只读属性,包括base、label和ngpio等多个。

  • “base”属性

和gpiochipN的N代表的含义相同,表示被该组GPIO控制器实现的第一个GPIO。

  • “ngpio”属性

用于表示该控制器支持多少个GPIO,支持的GPIO编号为从N到N+ngpio-1。

  • “label”属性

用于判断控制器,并不总是唯一的。

更多内容请看下回。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 20:12:52

上传文件失败?检查这三项设置确保DDColor顺利运行

上传文件失败?检查这三项设置确保DDColor顺利运行 在尝试修复一张泛黄的老照片时,你是否曾满怀期待地打开ComfyUI,选好DDColor工作流,点击“上传”,结果却只看到一个冰冷的提示:“上传失败”?没…

作者头像 李华
网站建设 2026/5/10 16:17:34

终极指南:如何快速掌握HoverNet细胞核分割技术

终极指南:如何快速掌握HoverNet细胞核分割技术 【免费下载链接】hover_net Simultaneous Nuclear Instance Segmentation and Classification in H&E Histology Images. 项目地址: https://gitcode.com/gh_mirrors/ho/hover_net HoverNet是一款专业的医学…

作者头像 李华
网站建设 2026/4/27 21:43:51

手把手教你编写LCD1602液晶显示屏程序(硬件级操作)

从零开始,亲手点亮你的第一块LCD1602——硬件级驱动全解析你有没有过这样的经历?在调试一个嵌入式系统时,串口输出不够直观,又不想接复杂的图形界面,只希望有个简单的地方能“看到”变量值、状态码或者传感器读数。这时…

作者头像 李华
网站建设 2026/5/6 20:00:24

Elasticsearch 201状态码场景分析:文档新增成功案例

当你看到 Elasticsearch 返回 201,到底发生了什么?你有没有在调试代码时,盯着 Kibana 控制台或 Python 脚本的输出,突然看到一行status: 201,心里默默松了口气:“好了,数据进去了”?…

作者头像 李华
网站建设 2026/5/8 21:51:28

VR沉浸式体验:走进一张被完全复原的上世纪街景照片

VR沉浸式体验:走进一张被完全复原的上世纪街景照片 在一间尘封已久的档案馆里,一张泛黄的老照片静静躺在盒底——那是上世纪三十年代的一条老街,石板路湿漉漉的,行人穿着长衫或呢大衣,店铺招牌用繁体字书写。可惜&…

作者头像 李华