嵌入式Linux中GPIO设置的一些基本指令和步骤

一、GPIO的介绍

  嵌入式Linux中的GPIO(General Purpose Input/Output,通用输入/输出)是一种常用的接口,允许开发者直接控制硬件设备的某些引脚,进行诸如LED控制、传感器读取、设备状态监测等任务。

二、设置步骤和示例

  在嵌入式Linux系统中,GPIO的设置和管理通常涉及以下几个方面:

  • GPIO的导出和配置:首先,需要将GPIO引脚导出到用户空间,以便用户空间的程序可以访问和控制它。这通常通过 /sys/class/gpio接口完成。例如,要将GPIO引脚79导出,可以使用以下命令:
echo 79> /sys/class/gpio/export

导出后,可以使用以下命令查看已导出的GPIO列表:

ls /sys/class/gpio
  • 设置GPIO的方向:GPIO引脚可以配置为输入或输出模式。对于输出引脚,可以设置其电平(高电平或低电平)。对于输入引脚,可以读取其电平状态。使用以下命令可以设置GPIO79为输出模式:
echo out > /sys/class/gpio/gpio79/direction
  • 设置和读取GPIO的电平:
    对于输出引脚,可以使用以下命令设置其电平:
echo 1 > /sys/class/gpio/gpio79/value  # 设置GPIO79为高电平  
echo 0 > /sys/class/gpio/gpio79/value  # 设置GPIO79为低电平

对于输入引脚,可以使用以下命令读取其电平:

cat /sys/class/gpio/gpio79/value  # 读取GPIO79的电平

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

#导出GPIO到用户空间
echo 8 > /sys/class/gpio/export
#查看目录的变化,增加了gpio8目录
ls /sys/class/gpio/
#把gpio8从用户空间中取消导出
echo 8 > /sys/class/gpio/unexport
#查看目录变化,gpio8目录消失了
ls /sys/class/gpio/

export文件:导出GPIO,该文件只能写不能读,用户向该文件写 入GPIO的编号N可以向内核申请将该编号的GPIO导出到用户空间,若内核本 身没有把该GPIO用于其它功能,那么在/sys/class/gpio目录下会新增一 个对应编号的gpioN目录,如导出了gpio8。

unexport文件:export的相反操作,取消导出GPIO,该文件同样只能写不能读。如往unexport写入8后,gpio8目录消失了。
在这里插入图片描述
查看GPIO8文件下的内容

ls -lH /sys/class/gpio/gpio8
或者
cd /sys/class/gpio/gpio8
ls 

在这里插入图片描述
在这里插入图片描述

常用的属性文件介绍如下:

  1. direction文件:表示GPIO引脚的方向,它的可取值如下:

    • in:引脚为输入模式。
    • out:引脚为输出模式,且默认输出电平为低。
    • low:引脚为输出模式,且默认输出电平为低。
    • high:引脚为输出模式,且默认输出电平为高。
  2. value文件:GPIO的电平,1表示高电平,0表示低电平。当GPIO被配置为输出模式, 那么修改该文件的内容可以改变引脚的电平。也可配置为输入模式,检测电平的高低。

  3. edge文件:用于配置GPIO的中断触发方式,当GPIO被配置为中断时,可以通过系统 的poll函数监听。edge文件可取如下的属性值:

    • none:没有使用中断模式。
    • rising:表示引脚为中断输入模式,上升沿触发。
    • falling:表示引脚为中断输入模式,下降沿触发。
    • both:表示引脚为中断输入模式,边沿触发。

三、其它

引脚值计算公式:

index = GPIOn_IOx = (n-1)*32 + x

A为1,B为2,C为3…
比如 :
PB15的引脚值为
index=(2-1)32+15=47
PE12的引脚值为
index=32
(5-1)+12 =140

  编写GPIO驱动程序:对于更复杂的GPIO控制需求,可能需要编写GPIO驱动程序。驱动程序通常包括GPIO的初始化、配置、读取和设置等操作。 驱动程序编写完成后,需要将其编译为内核模块,并使用insmod命令加载到内核中。
  请注意,具体的GPIO编号和操作方法可能因不同的硬件平台和Linux版本而有所差异。因此,在实际操作中,请参考相关硬件和Linux版本的文档和参考资料。
  以上是关于嵌入式Linux中GPIO设置的一些基本指令和步骤。通过学习和实践这些指令和步骤,开发者可以更好地掌握GPIO的控制方法,实现各种硬件设备的控制和管理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/715812.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第四十四天| 卡尔网 52. 携带研究材料、518. 零钱兑换 II、377. 组合总和 Ⅳ

01背包问题卡尔网 52. 携带研究材料 题目链接:52 携带研究材料 题干:小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括…

centos7安装夜莺

一、前期准备 1.1.关闭防火墙,SELINUX systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0 sed -i "s/SELINUXenforcing/SELINUXdisabled/g" /etc/selinux/config查看状态 systemctl status firewalld systemctl sta…

Vue开发实例(三)项目引入Element-UI

项目引入Element-UI 一、引入Element-UI二、注册组件1、vue2使用element-ui2、vue3使用element-ui 三、使用Element组件1、轻微改造2、验证element是否生效 一、引入Element-UI npm i element-ui --save npm install element-ui -S等待安装完成 二、注册组件 1、vue2使用ele…

【Leetcode每日一题】前缀和(难度⭐)(25)

1. 题目解析 题目链接:DP34 【模板】前缀和 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 核心在于计算题目所给区间数组元素和返回即可。 2. 算法原理 为了提高计算效率,我们可以预先计算出一个「前缀…

在github的README.md中插入视频;在github的README.md中添加gif演示动画

最近需要再github中上传项目的源代码,应导师的要求,需要再README中加入对实验视频的展示,但是github的README.md其实就是一个markdown文件,据我的理解这个文件里应该无法直接插入视频吧?(如果后续有办法直接…

UE4c++ ConvertActorsToStaticMesh ConvertProceduralMeshToStaticMesh

UE4c ConvertActorsToStaticMesh 创建Edior模块(最好是放Editor模块毕竟是编辑器代码)创建蓝图函数UBlueprintFunctionLibraryUTestFunctionLibrary.hUTestFunctionLibrary.cpp:.Build.cs 目标:为了大量生成模型,我们把虚幻带有的方法迁移成函…

leetcode 热题 100_三数之和

题解一: 双指针遍历:暴力解法的三层遍历会超时,因此需要优化遍历的过程。首先是需要对结果进行去重,这里采用排序跳过重复值的做法,在指针遍历时跳过已经遍历过的相同值。在第一层循环确定第一个值后,剩下两…

模型部署 - onnx 的导出和分析 -(1) - PyTorch 导出 ONNX - 学习记录

onnx 的导出和分析 一、PyTorch 导出 ONNX 的方法1.1、一个简单的例子 -- 将线性模型转成 onnx1.2、导出多个输出头的模型1.3、导出含有动态维度的模型 二、pytorch 导出 onnx 不成功的时候如何解决2.1、修改 opset 的版本2.2、替换 pytorch 中的算子组合2.3、在 pytorch 登记&…

vscode+remote突然无法连接服务器以及ssh连接出问题时的排错方法

文章目录 设备描述状况描述解决方法当ssh连接出问题时的排错方法 设备描述 主机:win11,使用vscode的remote-ssh插件 服务器:阿里云的2C2GUbuntu 22.04 UFIE 状况描述 之前一直使用的是vscode的remote服务,都是能够正常连接服务…

vue2结合electron开发桌面端应用

一、Electron是什么? Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 。允许您保持一个 JavaScript 代码代码库并创建可在Windows、macOS和Linux上运行的跨平台应用 。 Electron 经常与 Ch…

scrapy 中间件

就是发送请求的时候,会经过,中间件。中间件会处理,你的请求 下面是代码: # Define here the models for your spider middleware # # See documentation in: # https://docs.scrapy.org/en/latest/topics/spider-middleware.html…

【快速上手ProtoBuf】基本使用

文章目录 1 :peach:初识 ProtoBuf:peach:1.1 :apple:序列化概念:apple:1.2 :apple:ProtoBuf 是什么:apple:1.3 :apple:ProtoBuf 的使用特点:apple: 2 :peach:创建 .proto ⽂件:peach:3 :peach:编译 .proto 文件:peach:3 :peach:序列化与反序列化的使用:peach: 1 🍑初…

LeetCode 刷题 [C++] 第45题.跳跃游戏 II

题目描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i]i j < n 返回到达 nums[n …

【C语言】熟悉文件基础知识

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 文件 为了数据持久化保存&#xff0c;使用文件&#xff0c;否则数据存储在内存中&#xff0c;程序退出&#xff0c;内存回收&#xff0c;数据就会丢失。 程序设计中&…

微信小程序,h5端自适应登陆方式

微信小程序端只显示登陆(获取opid),h5端显示通过账户密码登陆 例如: 通过下面的变量控制: const isWeixin ref(false); // #ifdef MP-WEIXIN isWeixin.value true; // #endif

LIN基础:从LIN Frame开始

目录&#xff1a; 1、LIN的网络拓扑 2、LIN Frame 1&#xff09;Header 2&#xff09;Response 3、LIN的通信规则 1&#xff09;LIN的发送行为示例 2&#xff09;LIN的接收行为示例 虽然LIN总线的通信速率不高&#xff0c;工程中&#xff0c;最高的速率也就19200bps。…

StarRocks——Stream Load 事务接口实现原理

目录 前言 一、StarRocks 数据导入 二、StarRocks 事务写入原理 三、InLong 实时写入StarRocks原理 3.1 InLong概述 3.2 基本原理 3.3 详细流程 3.3.1 任务写入数据 3.3.2 任务保存检查点 3.3.3 任务如何确认保存点成功 3.3.4 任务如何初始化 3.4 Exactly Once 保证…

Leetcode - 周赛386

目录 一&#xff0c;3046. 分割数组 二&#xff0c;3047. 求交集区域内的最大正方形面积 三&#xff0c;3048. 标记所有下标的最早秒数 I 四&#xff0c;3049. 标记所有下标的最早秒数 II 一&#xff0c;3046. 分割数组 将题目给的数组nums分成两个数组&#xff0c;且这两个…

盲人出行:科技创造美好的未来

在繁忙的都市中&#xff0c;我每天都要面对许多挑战&#xff0c;盲人出行安全保障一直难以得到落实。我看不见这个世界&#xff0c;只能依靠触觉和听觉来感知周围的一切。然而&#xff0c;我从未放弃过对生活的热爱和对未来的憧憬。在一次机缘巧合下&#xff0c;我认识了一款名…

C3_W2_Collaborative_RecSys_Assignment_吴恩达_中英_Pytorch

Practice lab: Collaborative Filtering Recommender Systems(实践实验室:协同过滤推荐系统) In this exercise, you will implement collaborative filtering to build a recommender system for movies. 在本次实验中&#xff0c;你将实现协同过滤来构建一个电影推荐系统。 …