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/5 12:54:18

NFT数字藏品尝试:将稀有老照片修复成果铸造成区块链资产

NFT数字藏品尝试:将稀有老照片修复成果铸造成区块链资产 在一座尘封的阁楼里,泛黄的照片静静躺在旧木箱中。它们记录着百年前的街景、祖辈的面容、早已消失的建筑风貌——这些图像不仅是私人记忆的碎片,更是城市变迁的无声见证。然而&#xf…

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

VHDL语言状态机编码风格一文说清

一文讲透VHDL状态机编码:从单进程到三进程的工程实践你有没有遇到过这样的情况?写完一个状态机,仿真看起来没问题,烧进FPGA后却行为诡异;或者团队接手你的代码时抱怨“这逻辑绕得像迷宫”;又或者在做形式验…

作者头像 李华
网站建设 2026/5/3 10:27:41

iverilog从零实现:构建自动化仿真批处理脚本

用iverilog搭建自动化仿真系统:从零开始的实战指南你有没有过这样的经历?写完一个计数器模块,兴冲冲地打开终端,敲下iverilog命令,结果发现忘了加测试平台文件;好不容易跑通了,又想看波形&#…

作者头像 李华
网站建设 2026/5/8 2:58:50

SVG优化必备神器:高效压缩技巧与实战指南

SVG优化必备神器:高效压缩技巧与实战指南 【免费下载链接】svgomg Web GUI for SVGO 项目地址: https://gitcode.com/gh_mirrors/sv/svgomg 在当今追求极致用户体验的网页设计时代,SVG矢量图形已成为提升网站性能的关键要素。然而,原始…

作者头像 李华
网站建设 2026/5/3 19:13:58

AB下载管理器:颠覆传统下载体验的极速管理神器

还在为龟速下载而烦恼吗?每次遇到大文件下载就像在等待一场漫长的马拉松?AB下载管理器正是为解决这些痛点而生的革命性下载工具。这款基于Kotlin和Compose for Desktop技术栈开发的跨平台下载管理器,不仅能大幅提升下载速度,更提供…

作者头像 李华
网站建设 2026/5/3 8:57:24

百度网盘秒传工具完全指南:零基础快速掌握文件极速转存

还在为百度网盘资源转存效率低下而烦恼吗?这款纯网页秒传工具能彻底改变你的文件管理体验。无需安装任何软件,只需一个浏览器就能实现秒传链接的转存、生成和转换,真正实现跨平台无缝操作。 【免费下载链接】baidupan-rapidupload 百度网盘秒…

作者头像 李华