news 2026/4/20 5:27:08

全志模块设备开发之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/4/18 3:00:31

IntelliJ Spring Assistant插件:Spring开发效率提升终极指南

IntelliJ Spring Assistant插件:Spring开发效率提升终极指南 【免费下载链接】intellij-spring-assistant Spring Assistant - IntelliJ plugin that assists you in developing spring applications 项目地址: https://gitcode.com/gh_mirrors/in/intellij-sprin…

作者头像 李华
网站建设 2026/4/19 17:58:34

企业微信接入:为机构客户提供专属DDColor服务对接通道

企业微信接入:为机构客户提供专属DDColor服务对接通道 在档案数字化浪潮席卷各行各业的今天,许多企业和文博单位正面临一个共同难题:如何让尘封已久的黑白老照片重新“活”起来?这些承载着组织记忆与历史温度的影像,往…

作者头像 李华
网站建设 2026/4/17 23:29:32

Swagger UI集成:可视化调试你的DDColor服务接口

Swagger UI集成:可视化调试你的DDColor服务接口 在当今AI图像处理应用日益复杂的背景下,如何让一个强大的模型真正“可用”,早已不只是算法精度的问题。以老照片修复为例,即便拥有像 DDColor 这样具备高还原度的着色能力&#xff…

作者头像 李华
网站建设 2026/4/20 0:32:16

UI-TARS桌面版:用自然语言重新定义计算机操作体验

UI-TARS桌面版:用自然语言重新定义计算机操作体验 【免费下载链接】UI-TARS-desktop A GUI Agent application based on UI-TARS(Vision-Lanuage Model) that allows you to control your computer using natural language. 项目地址: https://gitcode.com/GitHub…

作者头像 李华
网站建设 2026/4/18 23:08:53

OpenMetadata终极实战:从零构建企业级数据治理平台

OpenMetadata终极实战:从零构建企业级数据治理平台 【免费下载链接】OpenMetadata 开放标准的元数据。一个发现、协作并确保数据正确的单一地点。 项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata 你是否曾经面对海量数据资产却无从下手&…

作者头像 李华
网站建设 2026/4/18 12:01:22

如何快速掌握JSON文件处理:VS Code终极扩展指南

还在为复杂的JSON文件结构而头疼吗?这款专为Visual Studio Code设计的JSON处理工具将彻底改变你的开发体验!作为一款功能强大的JSON解析扩展,它能够帮助开发者轻松应对各种JSON数据处理需求。 【免费下载链接】vscode-json Json for Visual S…

作者头像 李华