news 2026/2/3 17:21:28

全志模块设备开发之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/2/4 0:31:06

全面掌握OpenMetadata:从入门到精通的元数据管理实战指南

全面掌握OpenMetadata:从入门到精通的元数据管理实战指南 【免费下载链接】OpenMetadata 开放标准的元数据。一个发现、协作并确保数据正确的单一地点。 项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata 在当今数据驱动的商业环境中&#xf…

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

从零实现:使用Ollydbg跟踪内存注入攻击行为

深入内存的暗流:用 OllyDbg 实时追踪一次经典的进程注入攻击你有没有想过,一个看似无害的记事本程序(notepad.exe),是如何在毫无征兆的情况下突然弹出一个“Hello World”对话框的?这不是魔法,而…

作者头像 李华
网站建设 2026/1/30 3:14:37

HoverNet终极指南:快速掌握细胞核智能分割与分类技术

HoverNet终极指南:快速掌握细胞核智能分割与分类技术 【免费下载链接】hover_net Simultaneous Nuclear Instance Segmentation and Classification in H&E Histology Images. 项目地址: https://gitcode.com/gh_mirrors/ho/hover_net 想要在组织病理学图…

作者头像 李华
网站建设 2026/1/30 0:52:36

BusyBox在交叉编译环境中的系统集成:操作指南

从零构建嵌入式Linux系统:用BusyBox打造最小根文件系统你有没有试过,在一块只有32MB内存、128MB闪存的开发板上跑起一个完整的Linux?没有GUI,没有桌面环境,甚至没有包管理器——但开机几秒后,终端亮了&…

作者头像 李华
网站建设 2026/2/2 23:22:01

GDPR合规自查:欧盟用户数据处理是否符合隐私保护法规

GDPR合规自查:欧盟用户数据处理是否符合隐私保护法规 在AI图像修复技术日益普及的今天,越来越多用户通过网页工具上传老照片进行智能上色与修复。一张泛黄的家庭合影、一座早已拆除的老建筑——这些看似普通的图像背后,可能隐藏着受GDPR严格保…

作者头像 李华
网站建设 2026/1/30 4:25:07

3步搞定安卓投屏:QtScrcpy终极配置手册

3步搞定安卓投屏:QtScrcpy终极配置手册 【免费下载链接】QtScrcpy Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrcpy 还在为手机…

作者头像 李华