Linux下用文件IO的方式操作GPIO

news2024/11/19 7:30:27

1.首先查看系统中有没有 “/sys/class/gpio” 这个文件夹。如果没有请在编译内核的时候通过make menuconfig加入。

Device Drivers -> 
        GPIO Support ->
                /sys/class/gpio/… (sysfs interface)。

2./sys/class/gpio 的使用说明

如果是在已经适配好的 Linux 内核上,那么相信已经有了完成的 gpiochip,可以在用户空间 /sys/class/gpio 目录下看到如下文件:

export
gpiochip0/
gpiochip32/
gpiochip64/
gpiochip96/
unexport

export:用于通知系统需要导出控制的GPIO引脚编号,导出成功会出现 gpio*,如下的gpio62

root@NanoPi2:~/Documents# echo 62 > /sys/class/gpio/export                                                
root@NanoPi2:~/Documents# ls /sys/class/gpio/
export  gpiochip0    gpiochip160  gpiochip64  unexport
gpio62  gpiochip128  gpiochip32   gpiochip96

导出失败:

说明引脚被占用:

 此时GPIO258引脚被hdmi-power引脚占用。

查看设备树中hdmi-power引脚的使用,如果未使用到,将其删除。

echo 258 > /sys/class/gpio/export

删除后再次编译烧录可以成功导出。 

 unexport:用于通知系统取消导出,相应的gpio* 消失

echo  62 > /sys/class/gpio/unexport

gpiochipx : gpio各group的信息,如下

root@NanoPi2:~/Documents# ls /sys/class/gpio/gpiochip0
base  device  label  ngpio  power  subsystem  uevent
  • base :引脚的起始编号
  • label:寄存器名称
  • ngpio: 引脚总数

3.编写shell脚本控制gpio的高低电平

#!/bin/sh

# ['I'-'A'] = 8
# PI2=32*8+2=258
if [ -e /sys/class/gpio/gpio258 ]; then
	exit
else	
	echo 258 > /sys/class/gpio/export
	echo out > /sys/class/gpio/gpio258/direction
	while [ true ] ; do	
		echo 1 > /sys/class/gpio/gpio258/value
		sleep 0.5
		echo 0 > /sys/class/gpio/gpio258/value
		sleep 0.5
	done
fi

首先计算此引脚编号

引脚编号 = 控制引脚的寄存器基数 + 控制引脚寄存器位数

GPIOI_2  PI2=32*8+2=258

4.测量引脚波形输出。

 

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

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

相关文章

【Vue路由】路由的简介及基本使用

文章目录路由的简介路由的基本使用几个使用路由的注意点组件分类组件去向路由组件路由的简介 再说路由之前,我们先来看看生活中的路由器,它的作用就是让多台设备同时上网,同时每一个接口对应一个网络设备: 我们可以这样来看&am…

面试题分享|Linux定时任务调度机制是怎么回事?

一. 前言 在求职过程中,有过面试经历的小伙伴们都知道,企业对linux的考察还是蛮频繁的。作为java开发程序员,在企业中我们的服务器都是在linux环境中部署的,所以熟练使用linux已经成为企业招聘人才的基本需求。但很多小伙伴在学习…

基于蚁群算法的车辆路径规划问题的研究(Matlab代码实现)

目录 1 概述 1.1研究背景 2 运行结果 3 Matlab代码实现 4 结语 5 参考文献 1 概述 车辆路径规划问题(Vehicle Routing Problem,VRP)是现代物流配送过程中的关键环节,而且其在众多领域中都有广泛的应用,因此它的提出引起了不同学科的专家和物流管理…

LeetCode HOT 100 —— 146.LRU缓存

题目 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key存在于缓存中,则返回关键字的值,否则返回…

TI Lab_SRR学习_3 速度扩展_1 预备知识

首先先了解一下SRR模式下的chirp配置是什么样子,SRR的chirp的配置文件可以看(位置位于toolbox中)C:\mmwave_automotive_toolbox_3_1_0__win\mmwave_automotive_toolbox_3_1_0\labs\lab0002_short_range_radar\src\commonsrr_config_chirp_design_SRR80.h 通过以上代码可以知…

网络编程套接字——UDP

一、基础知识 1.区分源地址、目的地址 (1)源IP地址和目的地址:最开始的IP地址与送达数据的地址 (2)源MAC地址和目的MAC地址:相当于上一站的地址与下一站的地址,在不断地变化 socket通信&#…

数据库专辑--SQL分类汇总(group by...with rollup),增加“总计”字段

系列文章 C#底层库–数据库访问帮助类(MySQL版) 数据库专辑–WITH CHECK OPTION的用法 文章目录系列文章前言一、概念介绍二、测试用例2.1 创建表2.2 初始化数据2.3 数据查询2.4 分析问题2.5 解决问题2.6 推荐另一种写法,使用COALESCE三、用…

如何撰写品牌故事?品牌故事软文撰写技巧分享

你听过哪些有温度的品牌故事?我首先想到的是香奈儿: 我的生活不曾取悦于我,所以我创造了自己的生活。 这是香奈儿的创始人可可香奈儿给世人留下的一句话,也是她一生的真实写照。 她被后人看作女性解放和独立的一个象征&#xf…

查询网站有没有被搜狗收录复杂吗?查询搜狗收录简单的方法

对于网站收录的概念,互联网中或者搜索引擎中已经有大量的相关定义。网站收录,指的是爬虫爬取了网页,并将页面内容数据放入搜索引擎数据库中这一结果。 查询网站有没有被搜狗收录复杂吗? 用网站批量查询工具呀!操作超简…

React高级备忘录(生命周期)class component

须知 什么是生命周期?就像人有生老病死,component也有类似这样的概念,了解生命周期可以让我们知道如何在「对」的时间做「对」的事。 — Lieutenant 过! 常用生命周期 可以分为三大部分 创建component (componentDidMount)更新component(componentDidUpdate)销毁compone…

照一次CT,对人体的伤害有多大?终于有医生肯站出来说实话

CT是一种检查身体的方式,对于这项检查项目,一直有都有不好的传言,有的人听说CT有辐射,而且辐射比较大,所以比较排斥。 也有的人听说频繁做CT会致癌,所以不愿意做,还有的人把CT当作筛查癌症的神器…

Spring从入门到精通(二)

文章目录1.动态代理1.1 概念1.2 jdk动态代理(重点)1.3 基于子类的动态代理(了解)2.AOP2.1 概念2.2 springAop — 基于AspectJ技术2.2.1 AspectJ使用(XML)2.2.2 AspectJ使用(注解开发&#xff09…

【数据结构】二叉树的实现OJ练习

文章目录前言(一) 二叉树的接口实现构建二叉树前序遍历中序遍历后序遍历层序遍历二叉树的节点个数二叉树叶子节点个数二叉树第K层节点个数二叉树的高度查找指定节点判断完全二叉树销毁二叉树(二) 二叉树基础OJ练习单值二叉树相同的树另一棵树的子树二叉树的前序遍历二叉树的最大…

[oeasy]python0026_刷新时间_延迟时间_time_sleep_死循环_while_True

刷新时间 回忆上次内容 time 是一个 ​​module​ import 他可以做和时间相关的事情time.time() 得到当前时间戳 time.localtime() 得到本地时间元组local为本地 time.asctime() 得到时间日期字符串asc为ascii 简略的写法为 asc_time time.asctime() 在​​time.asctime()​…

python -- PyQt5(designer)中文详细教程(六)控件1

控件1 控件就像是应⽤这座房⼦的⼀块块砖。PyQt5有很多的控件,⽐如按钮,单选框,滑动条,复选框等 等。在本章,我们将介绍⼀些很有⽤的控 件: QCheckBox , ToggleButton , QSlider &a…

关于JavaScript运算符的学习

关于博主每篇博文的浪漫主义 【“仅此105秒,无法超越的绝美画面!!”】 https://www.bilibili.com/video/BV1nW4y1x78x/?share_sourcecopy_web&vd_source385ba0043075be7c24c4aeb4aaa73352 “仅此105秒,无法超越的绝美画面!!…

应用案例:有源无源电路协同仿真

01 有源无源电路协同仿真 随着电路系统集成度和信号速率的提高,电路中的电磁场效应越来越明显,单纯使用电路分析方法已不能满足仿真评估精度要求,这种情况下必须对问题进行分解,采用三维电磁场全波方法对信号传播路径上的封装与…

[附源码]计算机毕业设计JAVA在线文献查阅系统

[附源码]计算机毕业设计JAVA在线文献查阅系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybati…

C# 拖放操作

一 拖放操作 拖放操作Drag and Drop是两个窗口之间传递数据的一种手段。 1 拖放操作两部分:拖Drag、放Drop 几个术语: ① 源窗口:发起拖拽StartDrag; ② 目标窗口:接受拖放AcceptDraop; ③ 拖拽物:即传输的数据Dat…

ChatGPT有多厉害,影响到谷歌地位?

AI神器ChatGPT 火了。 能直接生成代码、会自动修复bug、在线问诊、模仿莎士比亚风格写作……各种话题都能hold住,它就是OpenAI刚刚推出的——ChatGPT。 有脑洞大开的网友甚至用它来设计游戏:先用ChatGPT生成游戏设定,再用Midjourney出图&…