GPIO控制和命名规则

Linux提供了GPIO子系统驱动框架,使用该驱动框架即可灵活地控制板子上的GPIO。

GPIO命名

泰山派开发板板载了一个40PIN 2.54间距的贴片排针,排针的引脚定义兼容经典40PIN接口。

在后续对GPIO进行操作前,我们需要先了解k3566的GPIO命名规则, 此处以 GPIO0_B7 举例:

GPIO

0

B7

控制器(bank)

端口(port)

索引序号(pin)

  • 控制器(bank):rk3566有5个GPIO控制器分别是GPIO0-GPIO4,一个控制器下面包含ABCD个端口,每个端口下有包含0-7个索引序号,所以一个控制器可控制32个IO引脚。
  • 端口(port): A、B、C、D。对应着数字:0-3所以A=0、B=1、C=2、D=3
  • 索引序号(pin):固定为0-7共计8个数

代入 GPIO0_B7 ,该引脚的 ID 可以按照以下规则组成:

控制器 (bank) 为 0,表示第 0 组控制器。

端口(port)为 B,表示端口号为1。

索引序号(pin)为7。

根据计算公式:32 x 0 + 1 x 8 + 7 = 15,可以得到引脚ID为15。

sysfs操控GPIO

在Linux中,最常见的读写GPIO方式就是用GPIO sysfs interface, 是通过操作 /sys/class/gpio 目录下的 exportunexportgpio{N}/direction, gpio{N} /value (用实际引脚号替代{N})等文件实现的,经常出现shell脚本里面。 在kernel 4.8开始,加入了libgpiod的支持;而原有基于sysfs的访问方式,将被逐渐放弃。

GPIO输出测试

使用杜邦线连接GPIO0_B7 引脚 和 核心板的P53引脚,看看能否使用下面的代码控制核心板的LED,实现亮灭效果。当然也可以接入逻辑分析仪,通过查看高低电平的变化。

#以下所有操作均需要打开管理者权限使用

# 将引脚号 15 导出为 GPIO 引脚,使其可以被访问和控制。
echo 15 > /sys/class/gpio/export

# 将引脚号 15 的方向设置为输出模式,即设置为输出引脚。
echo out > /sys/class/gpio/gpio15/direction

# 将引脚号 15 的值设置为 1,即将引脚设置为高电平。
echo 1 > /sys/class/gpio/gpio15/value

# 将引脚号 15 的值设置为 0,即将引脚置设置为低电平。
echo 0 > /sys/class/gpio/gpio15/value 

# 将引脚号 15 解除导出,即取消对引脚号 15 的 GPIO 控制权。
echo 15> /sys/class/gpio/unexport

GPIO输入测试

使用杜邦线连接GPIO0_B7 引脚 和 核心板的P32引脚(核心板上面的按钮外接了P32) ,然后对按键进行按下和弹起操作,并且通过下面的代码打印出来的值。

#以下所有操作均需要打开管理者权限使用

# 将引脚号 15 导出为 GPIO 引脚,使其可以被访问和控制。
echo 15 > /sys/class/gpio/export

# 将引脚号 15 的方向设置为输入模式,即设置为输入引脚。
echo in > /sys/class/gpio/gpio15/direction

# 读引脚的值,结果为1或0,更具引脚实际电平决定。
cat /sys/class/gpio/gpio15/value 

# 将引脚号 15 解除导出,即取消对引脚号 15 的 GPIO 控制权。
echo 15> /sys/class/gpio/unexport

libgpiod操控GPIO

libgpiod是一种字符设备接口,GPIO访问控制是通过操作字符设备文件(比如 /dev/gpiodchip0 gpio控制器)实现的, 并通过libgpiod提供一些命令工具、c库以及python封装。想要使用libgpiod,需要在板卡上安装libgpiod库。

#安装libgpiod库及头文件
sudo apt install  libgpiod-dev 

#安装gpiod 命令行工具
sudo apt install gpiod

常用的命令行如下,可使用 -h 查看命令相对应的使用说明(以GPIO0_B7为例)

命令

作用

使用举例

说明

gpiodetect

列出所有的GPIO控制器

gpiodetect(无参数)

列出所有的GPIO控制器

gpioinfo

列出gpio控制器的引脚情况

gpioinfo 0

列出第0组控制器引脚组情况

gpioset

设置gpio

gpioset 0 15=0

设置第0组控制器编号7引脚为低电平

gpioget

获取gpio引脚状态

gpioget 0 15

获取第0组控制器编号7的引脚状态

gpiomon

监控gpio的状态

gpiomon 0 15

监控第0组控制器编号7的引脚状态

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Sublime替换文本中的换行/回车符等特殊符号

1、快捷键打开查找替换(windows) Ctrl h 2、开启打开查找窗口最左侧的(.*)正则匹配功能,上图中箭头所指。 3、Find栏输出被替换的正则表达式,如\n 回车符,表达式会有颜色显示 4、Replace栏输入替换后的内容&#xff0…

第8章 对同步的硬件支持

为了保证并行程序执行的正确性和高效性,构建一个共享存储多处理器系统的硬件支持必须要解决缓存一致性、存储一致性和对同步原语的支持等问题。从软件的观点来看被广泛使用的同步原语包括锁、栅栏和点对点同步(信号量)。举例来说,…

用于将Grafana默认数据库sqlite3迁移到MySQL数据库

以下是一个方案,用于将Grafana数据迁移到MySQL数据库。 背景: grafana 默认采用的是sqlite3,当我们要以集群形式部署的时使用mysql较为方便,试了很多sqlite转mysql的方法要么收费,最后放弃。选择自己动手风衣足食。 目标: 迁移sqlite3切换…

Vue报错,xxx is defined #变量未定义

vue.js:5129 [Vue warn]: Error in v-on handler: "ReferenceError: count is not defined" 浏览器将这个变量 当做全局变量了,事实上它只是实例中的变量 加上this指定,是vue实例中的变量

进程链信任-父进程欺骗

文章目录 前记普通权限的父进程欺骗ShllCode上线进程提权基础进程提权注入 前记 父进程欺骗作用&#xff1a; 进程链信任免杀进程提权 检测&#xff1a; etw 普通权限的父进程欺骗 #include<stdio.h> #include<windows.h> #include <TlHelp32.h>DWORD …

跳过测试方法(测试类)(@Ignore)

1.什么情况下要使用跳过测试(测试类)方法? 写了一个测试方法但是不想执行 删掉该测试方法&#xff08;测试类&#xff09;注释该测试方法&#xff08;测试类&#xff09;使用Ignore注解 2.示例 2.1 必要工作 导入类库 import org.junit.Ignore; 2.2 使用Ignore注解跳过…

gin源码实战 day1

gin框架源码实战day1 Radix树 这个路由信息&#xff1a; r : gin.Default()r.GET("/", func1) r.GET("/search/", func2) r.GET("/support/", func3) r.GET("/blog/", func4) r.GET("/blog/:post/", func5) r.GET("/…

Web3区块链游戏:创造虚拟世界的全新体验

随着区块链技术的不断发展&#xff0c;Web3区块链游戏正逐渐崭露头角&#xff0c;为玩家带来了全新的虚拟世界体验。传统游戏中的中心化结构和封闭经济体系已经被打破&#xff0c;取而代之的是去中心化的游戏环境和真实所有权的数字资产。本文将深入探讨Web3区块链游戏的特点、…

Python Selenium实现自动化测试及Chrome驱动使用

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站零基础入门的AI学习网站~。 目录 ​编辑 前言 Selenium简介 安装Selenium库 编写自动化测试脚本 1 打开浏览器并访问网页 2 查找页面元…

[力扣 Hot100]Day30 两两交换链表中的节点

题目描述 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 出处 思路 前两个结点先偷一手用交换val做&#xff0c;从链表第1…

对视频进行分块,断点续传

分块测试 //分块测试Testpublic void testChunk() throws IOException {//源路径File sourceFile new File("D:\\BaiduNetdiskDownload\\Day1-00.项目导学.mp4");//分块文件存储路径String chunkFilePath "D:\\develop\\chunk\\";//分块文件大小int chun…

XR行业首家|李未可科技通过深度合成服务算法备案

2月18日&#xff0c;国家网信办发布第四批深度合成服务算法备案。 根据《互联网信息服务深度合成管理规定》第十九条规定&#xff0c;具有舆论属性或者社会动员能力的深度合成服务提供者&#xff0c;应当按照《互联网信息服务算法推荐管理规定》履行备案和变更、注销备案手续。…

(十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)

简述 操作路径如下: 作用:通过逐步增加线程数来模拟用户并发访问。配置:设置This group will start、First,wait for 、Then start、Next , add等参数。使用场景:模拟逐步增长的并发访问,观察应用程序的性能变化。优点:适用于测试应用程序在逐步增加负载下的性能表现。…

opencv-python保存视频为mp4格式并支持在浏览器播放

前言 之前在项目上使用yolov8进行视频检测的时候&#xff0c;yolov8默认windows系统下保存的是avi格式 suffix, fourcc (.mp4, avc1) if MACOS else (.avi, WMV2) if WINDOWS else (.avi, MJPG) self.vid_writer[idx] cv2.VideoWriter(str(Path(save_path).with_suffix(suf…

计算机专业假期必看5部电影

社交网络The Social Network (2010) 《社交网络》&#xff08;The Social Network&#xff09;根据本麦兹里奇的小说《意外的亿万富翁&#xff1a;Facebook的创立&#xff0c;一个关于性、金钱、天才和背叛的故事》改编而成。由大卫芬奇执导&#xff0c;杰西艾森伯格、安德鲁加…

Python第十七章(面向对象总结)

一。面向对象三大特征 1.封装&#xff1a;将属性和方法写到类里面&#xff0c;且可以添加私有属性和方法 2.继承&#xff1a;子类默认继承父类的所有属性和方法&#xff0c;子类可以重写父类的属性和方法 3.多态&#xff1a;传入不同的对象&#xff0c;产生不同的结果 二。多…

Spring6学习技术|IoC到生命周期

学习材料 尚硅谷Spring零基础入门到进阶&#xff0c;一套搞定spring6全套视频教程&#xff08;源码级讲解&#xff09; IoC 控制反转。是一种设计思想。 1.获取bean对象的方法 通过id&#xff0c;通过class&#xff0c;和双重方式。 ApplicationContext context new Cla…

qt-双臂SCARA机器人动画

qt-双臂SCARA机器人动画 一、演示效果二、核心程序三、下载链接 在Qt opengl中完成的双臂SCARA机器人的简单模拟。 一、演示效果 二、核心程序 #include "glwidget.h"#include <GL/glu.h>GLWidget::GLWidget(QWidget *parent) :QGLWidget(parent),pitch(30.…

第三十六天| 435. 无重叠区间、763.划分字母区间、56. 合并区间

Leetcode 435. 无重叠区间 题目链接&#xff1a;435 无重叠区间 题干&#xff1a;给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 思考&#xff1a;贪心法。和452 用最少数量的…
最新文章