linux下gpio控制
linux下gpio控制
文章目录
- linux下gpio控制
- 1.中断命令控制
- /sys/class/gpio/export
- 终端命令控制led
- 2.应用程序控制
- 3.驱动代码控制
1.中断命令控制
通用GPIO主要用于产生输出信号和捕捉输入信号。每组GPIO均可以配置为输出输入以及特定的复用功能。
当作为输入时,内置有上拉电阻,可以配置上拉、下拉、浮空(高阻态), GPIO也可配置为中断触发,触发方式有:电平触发、边沿触发。软件可配置。
pin控制器需要通过软件编程来控制,在Linux系统中表现为pin controller driver,Linux为了统一各厂商的pin脚管理,提供了pinctrl子系统,对上为其他软件模块提供
统一的API操作pin脚,对下为各芯片厂商实现pin controller driver提供统一的软件模型。• GPIO操作放发1: “/sys/class/gpio”该文件对所有GPIO编号,从0开始。 GPIOn_x的编号为32*n+x
/sys/class/gpio/export
/sys/class/gpio/export
是 Linux 系统中用于控制 GPIO(General Purpose Input/Output)引脚的虚拟文件。它的作用是允许用户请求并使能特定的 GPIO 引脚,以便可以通过 /sys/class/gpio/
路径进行后续的读写操作。
作用
当你希望在 Linux 系统中使用某个特定的 GPIO 引脚时,你需要通过 export
文件将其导出。具体来说,export
文件的作用是将指定的 GPIO 引脚暴露给用户空间,这样你就可以对它进行控制(例如配置为输入或输出,并读取或写入数据)。
使用流程
-
导出 GPIO 引脚
-
用户通过向
/sys/class/gpio/export
文件写入 GPIO 引脚的编号来导出该引脚。例如,如果你想控制 GPIO 引脚 17(编号通常与硬件有关),可以通过以下命令导出它:
echo 17 > /sys/class/gpio/export
-
写入数字
17
后,系统会在/sys/class/gpio/
下创建一个新的目录gpio17
,这个目录中包含了用于配置和操作 GPIO 17 的文件和设置。
-
-
访问和控制 GPIO 引脚
-
一旦导出某个 GPIO 引脚,就可以通过
/sys/class/gpio/gpioX/
目录进行进一步的配置和操作。这里的x
是你导出的 GPIO 引脚编号。例如,对于 GPIO 17,路径会是
/sys/class/gpio/gpio17/
。
direction
:设置该引脚为输入(in
)或输出(out
)。value
:读取(输入)或写入(输出)该引脚的状态(0 或 1)。edge
:配置该引脚的中断触发方式(例如:rising
、falling
、both
)。
-
-
卸载 GPIO 引脚
-
如果你不再需要某个 GPIO 引脚,可以通过向
/sys/class/gpio/unexport
文件写入该引脚的编号来卸载它。例如:
echo 17 > /sys/class/gpio/unexport
-
这会删除
/sys/class/gpio/gpio17/
目录,释放该 GPIO 引脚。
-
示例:
-
导出 GPIO 17:
echo 17 > /sys/class/gpio/export
-
设置 GPIO 17 为输出:
echo out > /sys/class/gpio/gpio17/direction
-
设置 GPIO 17 输出为高电平(1):
echo 1 > /sys/class/gpio/gpio17/value
-
读取 GPIO 17 的输入值:
cat /sys/class/gpio/gpio17/value
-
卸载 GPIO 17:
echo 17 > /sys/class/gpio/unexport
总结
/sys/class/gpio/export
的作用是允许用户请求并启用某个 GPIO 引脚,通过将 GPIO 引脚编号写入该文件,用户可以在 /sys/class/gpio/
下找到该引脚的控制文件,进而对该 GPIO 引脚进行操作。
Linux下/sys目录介绍_嵌入式linux sys 每一个目录含义-CSDN博客
终端命令控制led
led1 PB5 32+5 = 37
led2 PB4 32+4 = 36
echo 36 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio36/direction
echo 1 > /sys/class/gpio/gpio36/valueled2 亮echo high > /sys/class/gpio/gpio36/direction
直接设置方向并点亮echo low > /sys/class/gpio/gpio36/direction
直接设置方向并熄灭# echo in > /sys/class/gpio/gpio36/direction
# cat /sys/class/gpio/gpio36/value
0现象:灯灭
echo 37 > /sys/class/gpio/export
echo high > /sys/class/gpio/gpio37/direction直接设置方向并点亮
echo "rising" > /sys/class/gpio/gpio36/edge
echo " falling" > /sys/class/gpio/gpio36/edge
echo " both" > /sys/class/gpio/gpio36/edge
echo " none" > /sys/class/gpio/gpio36/edge在 Linux 系统中,通过 /sys/class/gpio/gpio36/edge 文件可以设置引脚的边沿触发方式。具体来说:echo "rising" > /sys/class/gpio/gpio36/edge这个命令设置 GPIO36 引脚为 上升沿触发。即,当 GPIO36 从 低电平 (0) 变为 高电平 (1) 时,会产生中断或事件。
echo "falling" > /sys/class/gpio/gpio36/edge这个命令设置 GPIO36 引脚为 下降沿触发。即,当 GPIO36 从 高电平 (1) 变为 低电平 (0) 时,会产生中断或事件。
echo "both" > /sys/class/gpio/gpio36/edge这个命令设置 GPIO36 引脚为 双边沿触发。即,不管是上升沿(低电平到高电平)还是下降沿(高电平到低电平)都会产生中断或事件。
echo "none" > /sys/class/gpio/gpio36/edge这个命令禁用引脚的边沿触发。也就是说,GPIO36 的电平变化不会产生中断或事件响应。
总结:
这些命令的作用是通过设置 edge 文件来定义 GPIO36 引脚在何种电平变化时触发中断。可以选择:上升沿 (rising)
下降沿 (falling)
双边沿 (both)
无边沿触发 (none)
使用这些配置后,GPIO36 的状态变化将根据设置的触发模式,激发对应的事件或中断,可以用于进一步的编程响应。
2.应用程序控制
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
/***************************************************************************
* 文件名称:main.c
* 文件标识:main.c
* 摘 要:GPIOB4/GPIOB5引脚操作函数,GPIOB4作为输出,LED1每隔1S闪烁一次
* GPIOB5作为输入,每隔1S,读取一次该引脚的状态
* 注 意:PB5默认读到0,LED将PB5引脚拉低,读1,需要给PB5接高电平
*****************************************************************************/
/*** @brief GPIOB5引脚读取线程* @param Pdata: 无* @return 无* */
void *CallBack_get_gpiob5(void *Pdata)
{FILE *p=NULL;char buff[10]= {0};while(1){p = fopen("/sys/class/gpio/gpio37/value","r");fseek(p,0,0);fread(buff,1,1,p);printf("GPIOB input value is %d\n",buff[0] - '0');buff[0] = 0;sleep(1);fclose(p);}
}int main()
{FILE *p=NULL;pthread_t pid;int ret = 0;p = fopen("/sys/class/gpio/export","w");fprintf(p,"%d",36);fclose(p);p = fopen("/sys/class/gpio/gpio36/direction","w");fprintf(p,"out");fclose(p);p = fopen("/sys/class/gpio/export","w");fprintf(p,"%d",37);fclose(p);p = fopen("/sys/class/gpio/gpio37/direction","w");fprintf(p,"in");fclose(p);//创建接收线程ret = pthread_create(&pid,NULL,CallBack_get_gpiob5,NULL);if(ret <0){perror("pthread creat err \n");return -1;}while(1){p = fopen("/sys/class/gpio/gpio36/direction","w");fprintf(p,"high");sleep(1);fclose(p);p = fopen("/sys/class/gpio/gpio36/direction","w");fprintf(p,"low");sleep(1);fclose(p);}}
现象:
led2闪烁线程读取led1引脚状态
3.驱动代码控制
驱动代码控制一般结合设备树和对应的驱动代码即可,具体可见正点原子和韦东山linux驱动教学视频
本章不做重点介绍
相关文章:

linux下gpio控制
linux下gpio控制 文章目录 linux下gpio控制1.中断命令控制/sys/class/gpio/export终端命令控制led 2.应用程序控制 3.驱动代码控制 1.中断命令控制 通用GPIO主要用于产生输出信号和捕捉输入信号。每组GPIO均可以配置为输出输入以及特定的复用功能。 当作为输入时,内…...

Spring Boot 从Socket 到Netty网络编程(下):Netty基本开发与改进【心跳、粘包与拆包、闲置连接】
上一篇:《Spring Boot 从Socket 到Netty网络编程(上):SOCKET 基本开发(BIO)与改进(NIO)》 前言 前文中我们简单介绍了基于Socket的BIO(阻塞式)与NIO(非阻塞式࿰…...

Orthanc:轻量级PACS服务器与DICOMweb支持的技术详解
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…...

量子计算导论课程设计 之 PennyLane环境搭建
文章目录 具体配置conda 虚拟环境配置Pennylane 正所谓,磨刀不误砍柴工,想要进行量子计算导论的课程设计,首先就是搭建好平台,推荐大家就是本地搭建,那么下面有三种选择 QiskitTensorFlow QuantumPennylane 具体配置…...

GAN优化与改进:从条件生成到训练稳定性
摘要 本文聚焦生成对抗网络(GAN)的核心优化技术与改进模型。系统解析 条件生成对抗网络(CGAN) 的可控生成机制、深度卷积GAN(DCGAN) 的架构创新,揭示GAN训练崩溃的本质原因,并介绍W…...
【Dv3Admin】系统视图下载中心API文件解析
大文件导出与批量数据下载常常成为后台系统性能瓶颈,合理管理下载任务是保障系统稳定运行的关键。任务化下载机制通过异步处理,避免前端等待阻塞,提升整体交互体验。 围绕 download_center.py 模块,剖析其在下载任务创建、查询、…...

linux库(AI回答)
STL POSIX关系 DeepSeek-R1 回答完成 搜索全网22篇资料 STL(标准模板库)和 POSIX(可移植操作系统接口)是两种不同领域的技术标准,它们在 C/C 开发中各有侧重,但可以协同使用。以下是它们的关系和区别&…...

CoordConv: CNN坐标感知特征适应
传统卷积 vs CoordConv 详细对比 传统卷积对空间位置不敏感,CoordConv通过显式添加坐标信息解决这个问题在特征图中嵌入(x, y)坐标和可选的径向距离r使模型能够感知空间位置关系 1. 传统卷积的"空间位置不敏感"问题 传统卷积的特点: 输入: …...
Kafka 快速上手:安装部署与 HelloWorld 实践(二)
四、Kafka 的 HelloWorld 实践 完成 Kafka 的安装部署后,我们就可以进行一些简单的操作来体验 Kafka 的功能了。下面通过一个 HelloWorld 示例,展示如何在 Kafka 中创建主题、发送消息和消费消息。 (一)创建主题(Top…...

opencv学习笔记2:卷积、均值滤波、中值滤波
目录 一、卷积概念 1.定义 2.数学原理 3.实例计算 (1) 输入与卷积核 (2)计算输出 g(2,2) 4.作用 二、针对图像噪声的滤波技术——均值滤波 1.均值滤波概念 (1)均值滤波作用 (2&#…...

在 Android Studio 中使用 GitLab 添加图片到 README.md
1. 将图片文件添加到项目中 在项目根目录下创建一个 images 或 assets 文件夹 将你的图片文件(如 screenshot.png)复制到这个文件夹中 2. 跟提交项目一样,提交图片到 GitLab 在 Android Studio 的 Git 工具窗口中: 右键点击图片…...

HarmonyOS:如何在启动框架中初始化HMRouter
应用启动时通常需要执行一系列初始化启动任务,如果将启动任务都放在应用主模块(即entry类型的Module)的UIAbility组件的onCreate生命周期中,那么只能在主线程中依次执行,不但影响应用的启动速度,而且当启动…...
Ubuntu下有关UDP网络通信的指令
1、查看防火墙状态: sudo ufw status # Ubuntu 2、 检查系统全局广播设置 # 查看是否忽略广播包(0表示接收,1表示忽略) sysctl net.ipv4.icmp_echo_ignore_broadcasts# 查看是否允许广播转发(1表示允许)…...
JavaWeb预习(jdbc)
基础 1.驱动程序接口Driver 每种数据库都提供了数据库驱动程序,并且都提供了一个实现java.sql.Driver接口的类,称为Driver 对于MySql,其Driver类为com.mysql.jdbc.Driver,加载该类的语句为: Class.forName("c…...

Web3 借贷与清算机制全解析:链上金融的运行逻辑
Web3 借贷与清算机制全解析:链上金融的运行逻辑 超额抵押借款 例如,借款人用ETH为抵押借入DAI;借款人的ETH的价值一定是要超过DAI的价值;借款人可以任意自由的使用自己借出的DAI 稳定币 第一步:借款人需要去提供一定…...

【Vue3】(三)vue3中的pinia状态管理、组件通信
目录 一、vue3的pinia 二、【props】传参 三、【自定义事件】传参 四、【mitt】传参 五、【v-model】传参(平常基本不写) 六、【$attrs】传参 七、【$refs和$parent】传参 八、provide和inject 一、vue3的pinia 1、什么是pinia? pinia …...
ingress-nginx 开启 Prometheus 监控 + Grafana 查看指标
环境已经部署了 ingress-nginx(DaemonSet 方式),并且 Prometheus Grafana 也已经运行。但之前 /metrics 端点没有暴露 Nginx 核心指标(如 nginx_ingress_controller_requests_total),经过调整后现在可以正…...
SQL进阶之旅 Day 21:临时表与内存表应用
【SQL进阶之旅 Day 21】临时表与内存表应用 文章简述 在SQL开发过程中,面对复杂查询、数据预处理和性能优化时,临时表和内存表是不可或缺的工具。本文深入讲解了临时表(Temporary Table)和内存表(Memory Table&#x…...

Jenkins自动化部署Maven项目
Jenkins自动化部署Maven项目 一、环境准备(Prerequisites) SpringBoot项目 确保项目根目录有标准Maven结构(pom.xml)且包含Dockerfile: # Dockerfile 示例 FROM openjdk:11-jre-slim VOLUME /tmp ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["j…...

LeetCode 高频 SQL 50 题(基础版)之 【高级字符串函数 / 正则表达式 / 子句】· 上
题目:1667. 修复表中的名字 题解: select user_id, concat(upper(left(name,1)),lower(right(name,length(name)-1))) name from Users order by user_id题目:1527. 患某种疾病的患者 题解: select * from Patients where con…...

Python 中 Django 中间件:原理、方法与实战应用
在 Python 的 Web 开发领域,Django 框架凭借其高效、便捷和功能丰富的特点备受开发者青睐。而 Django 中间件作为 Django 框架的重要组成部分,犹如 Web 应用的 “交通枢纽”,能够在请求与响应的处理流程中,实现对请求和响应的拦截…...

深入浅出玩转物联网时间同步:基于BC260Y的NTP实验与嵌入式仿真教学革命
在万物互联的时代,精准的时间戳是物联网系统的神经节拍器,而NTP协议正是维持这一节律的核心技术。 一、时间同步:物联网世界的隐形基石 在智慧城市、工业4.0等场景中,分散的设备需要毫秒级的时间协同。网络时间协议(N…...
数学建模期末速成 主成分分析的基本步骤
设有 n n n个研究对象, m m m个指标变量 x 1 , x 2 , ⋯ , x m x_1,x_2,\cdots,x_m x1,x2,⋯,xm,第 i i i个对象关于第 j j j个指标取值为 a i j a_{ij} aij,构造数据矩阵 A ( a i j ) n m A\left(\begin{array}{c}a_{ij}\end{array}\right)_{…...
视频音频去掉开头结尾 视频去掉前n秒后n秒 电视剧去掉开头歌曲
视频音频去掉开头结尾 视频去掉前n秒后n秒 视频音频去掉开头结尾 视频去掉前n秒后n秒 电视剧去掉开头歌曲 如果你有一些视频或者音频,你想去掉开头或结尾的几秒钟,那么你可以尝试一下这个工具,首先,我们来看一下,我们以…...

【在线五子棋对战】二、websocket 服务器搭建
文章目录 Ⅰ. WebSocket1、简介2、特点3、原理解析4、报文格式 Ⅱ. WebSocketpp1、认识2、常用接口3、websocketpp库搭建服务器搭建流程主体框架填充回调函数细节 4、编写 makefile 文件5、websocket客户端 Ⅰ. WebSocket 1、简介 WebSocket 是从 HTML5 开始支持的一种网页端…...

C++课设:从零开始打造影院订票系统
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、项目背景与需求分析二、系统架构设计…...

【计算机网络】数据链路层-滑动窗口协议
数据链路层滑动窗口协议 1. 三种协议对比表 特性停止-等待协议GBN协议SR协议窗口大小发送 1,接收 1发送 W (1<W≤2ⁿ-1),接收 1发送 C,接收 R确认方式单个确认累积确认选择性确认重传策略超时重传回退N帧重传选择性重传接收缓冲区…...

在linux系统上,如何安装Elasticsearch?
1.问题描述 当尝试连接时报错,报错内容为: elastic_transport.ConnectionError: Connection error caused by: ConnectionError(Connection error caused by: NewConnectionError(<urllib3.connection.HTTPConnection object at 0x7fd808b179d0>:…...

wpf Behaviors库实现支持多选操作进行后台绑定数据的ListView
<ListView ItemsSource"{Binding SchemeItems}" SelectionMode"Extended" VerticalAlignment"Stretch" HorizontalAlignment"Stretch"><ListView.ContextMenu><ContextMenu><MenuItem Header"删除" …...
【HarmonyOS 5】拍摄美化开发实践介绍以及详细案例
以下是 HarmonyOS 5 拍摄美化功能的简洁介绍,整合核心能力与技术亮点: 一、AI 影像创新 AI 魔法移图 系统级图像分层技术实现人物/物体自由拖拽、缩放与复制,突破传统构图限制。自动分离主体与背景,一键生成错位创意照&…...