GPIO应用编程

2023-11-02

开发平台:正点原子阿尔法开发板

PS:可以用cat /sys/kernel/debug/gpio命令查看引脚被占用情况

GPIO应用编程

/sys/class/gpio/export:是一个只写文件,用于导出需要使用的GPIO引脚

/sys/class/gpio/gpiox/:是一个文件夹,在引脚导出后自动在/sys/class/gpio/目录下生成的

/sys/class/gpio/gpiox/active_low:是一个文件,用来控制电平的极性(写1是高电平还是写0是高电平),默认写1是高电平,这个文件不用去管它

/sys/class/gpio/gpiox/direction:是一个文件,用来控制GPIO是输入还是输出,往directionout就是输出引脚,往directionin就是输入引脚

/sys/class/gpio/gpiox/edge:是一个文件,在输入模式下,写edge文件,配置gpio为外部中断引脚

非中断引脚: none
上升沿触发: rising
下降沿触发: falling
边沿触发: both

/sys/class/gpio/gpiox/value:是一个文件,在输出模式下,写该文件表示gpio输出;在输入模式下读该文件表示输入

编程步骤

  1. 把需要使用的GPIO导出,往**/sys/class/gpio/export**文件中写入数字表示导出的引脚
  2. GPIO导出后会在**/sys/class/gpio/目录下生成gpiox(x是引脚号)**的文件夹,对GPIO的各种操作都是在这个文件夹下发生的
  3. 进入gpiox文件夹,主要关注四个文件(active_low、direction、edge、value
    • 配置成输出模式:往directionout,然后往value中写1或0就行
    • 配置成输入模式:往directionin,然后读value文件就行
    • 配置成外部中断模式:在输入模式的基础上,写edge文件

应用编程

程序只进行简单的测试,没有特别规范

./文件名 引脚号 out/in 若是out(写1或0),in没用

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>

char gpio_path[100];
int gpio_config(const char * direction,const char * val)
{
    int fd,len;
    char file_path[200];
    char buf[10];
    sprintf(file_path,"%s/direction",gpio_path);
    if(-1==(fd=open(file_path,O_WRONLY))){
        perror("direction file open err\n");
        exit(1);
    }
    len=strlen(direction);
    if(len!=write(fd,direction,len)){
        perror("direction file write err\n");
        exit(1);
    }
    close(fd);
    if(0==strcmp(direction,"out"))
    {
        sprintf(file_path,"%s/value",gpio_path);
        if(-1==(fd=open(file_path,O_WRONLY))){
            perror("value file open err\n");
            exit(1);
        }
        len=strlen(val);
        if(len!=write(fd,val,len)){
            perror("value file write err\n");
            exit(1);
        }
        close(fd);
    }
    else
        if(0==strcmp(direction,"in"))
        {
            sprintf(file_path,"%s/value",gpio_path);
            if(-1==(fd=open(file_path,O_RDONLY))){
                perror("value file open err\n");
                exit(1);
            }
            if(1!=read(fd,buf,1))
            {
                perror("value file read err\n");
                exit(1);
            }
            printf("read %s \n",buf);
            close(fd);
        }
    
    exit(0);
}
int main(int argc,char * argv[])
{
    int fd,len;
    if(argc != 4){
        perror("argc err\n");
        exit(1);
    }
    sprintf(gpio_path,"/sys/class/gpio/gpio%s",argv[1]);
    if(0 != access(gpio_path,F_OK)){
        if((fd=open("/sys/class/gpio/export",O_WRONLY))==-1){
            perror("open err\n");
            exit(1);
        }
        len=strlen(argv[1]);
        if(len != write(fd,argv[1],len)){
            perror("write err\n");
            exit(1);
        }
        close(fd);
    }
    if(0!=gpio_config(argv[2],argv[3])){
        printf("gpio_config err\n");
        exit(1);
    }

    exit(0);
}

遇到的问题

  1. 把gpio0配置成输出模式,然后往value文件中写1后,用cat value发现value中的值没有发生变化,还是0,但是把该引脚接一个led发现led能亮,==不知哪里出现了问题?==输入模式同理

    echo "out" > direction 	#配置成输出模式
    echo "1" > value		#输出1
    cat value				#看value文件中值是否发生变化
    

能亮,==不知哪里出现了问题?==输入模式同理

echo "out" > direction 	#配置成输出模式
echo "1" > value		#输出1
cat value				#看value文件中值是否发生变化
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GPIO应用编程 的相关文章

  • Xvfb 冻结初始化 GLX 扩展

    我正在尝试运行无头 Xvfb 服务器来捕获 Amazon EC2 micro 上的屏幕截图 但它在 GLX 上陷入了困境 我使用此脚本安装了 GLX Xvfb 和所有库 https gist github com joekiller 414
  • 如何告诉 mex 链接到 /usr/lib 中的 libstdc++.so.6 而不是 MATLAB 目录中的 libstdc++.so.6?

    现在 MATLAB 2012a 中的 mex 仅正式支持 gcc 4 4 6 但我想使用 gcc 4 7 风险自负 现在如果我直接用 mex 编译一些东西 它会抱怨 usr lib gcc i686 linux gnu 4 7 cc1plu
  • 段错误...关于你好世界

    这段代码非常简单 但我在 x86 64 Linux 系统上遇到了段错误 这让我很烦恼 刚开始接触asm 请耐心等待 与 NASM 组装nasm f elf64 test asm 与连接ld o test test o SECTION tex
  • Qt 嵌入式触摸屏 QMouseEvents 在收到 MouseButtonRelease 之前未收到

    我在带有触摸屏的小型 ARM 嵌入式 Linux 设备上使用 Qt 4 8 3 我的触摸屏配置了 tslib 并对其进行了校准 因此 etc 中有一个 pointcal 文件 我的触摸事件的位置工作得很好 但无论如何我都会在鼠标按下或鼠标释
  • 选择fasta文件中氨基酸超过300个且“C”出现至少4次的序列

    我有一个包含蛋白质序列的 fasta 文件 我想选择超过 300 个氨基酸且半胱氨酸 C 氨基酸出现超过 4 次的序列 我使用此命令来选择具有超过 300 个 aa 的序列 cat 72hDOWN fasta fasta bioawk c
  • 我想在 Red Hat Linux 服务器中执行 .ps1 powershell 脚本

    我有一个在窗口中执行的 ps1 powershell 脚本 但我的整个数据都在 Linux 服务器中 有什么可能的方法可以让我在红帽服务器中执行 powershell 脚本 powershell脚本是 Clear Host path D D
  • 如何将一个文本文件拆分为多个 *.txt 文件?

    我有一个文本文件file txt 12 MB 包含 something1 something2 something3 something4 有没有办法分开file txt分成 12 个 txt 文件 比方说file2 txt file3 t
  • 对于任何真实数据集,数据压缩比的最小可能值是多少

    我在写信ZLIB类似于嵌入式硬件压缩器的 API 它使用 deflate 算法来压缩给定的输入流 在进一步讨论之前 我想解释一下数据压缩率 数据压缩率定义为未压缩大小与压缩大小之间的比率 压缩比通常大于一 这意味着压缩数据通常比未压缩数据小
  • 使用脚本检查 git 分支是否领先于另一个分支

    I have branch1 and branch2我想要某种 git branch1 isahead branch2 这将显示如果branch1已承诺branch2没有 也可能指定这些提交 我无法检查差异原因branch2 is在之前br
  • 在ubuntu中打开spyder

    我想在ubuntu中打开spyder Python IDE 通常我会在 shell 中编写 spyder 它会打开spyder IDE 现在 当我在shell中编写spyder时 它只是换行 什么也没有发生 类似于按 enter 我如何找回
  • bash 将输出重定向到文件,但结果不完整

    重定向命令输出的问题已经被问过很多次了 但是我有一个奇怪的行为 我使用的是 bash shell debian 版本 4 3 30 1 release 并尝试将输出重定向到文件 但并非所有内容都记录在文件中 我尝试运行的 bin 文件是 l
  • Docker忽略limits.conf(试图解决“打开文件太多”错误)

    我正在运行一个 Web 服务器 该服务器正在处理数千个并发 Web 套接字连接 为了实现这一点 在 Debian linux 我的基本镜像是 google debian wheezy 在 GCE 上运行 上 打开文件的默认数量设置为 100
  • 为什么此 NASM 代码会打印我的环境变量?

    本学期我刚刚完成计算机体系结构课程 除其他外 我们一直在涉足 MIPS 汇编并在 MARS 模拟器中运行它 今天 出于好奇 我开始在我的 Ubuntu 机器上摆弄 NASM 基本上只是将教程中的内容拼凑起来 并感受一下 NASM 与 MIP
  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令的输出?

    我试图将命令的输出分配给变量 而不让命令认为它正在通过管道传输 原因是 如果正在通过管道传输 则相关命令会给出未格式化的文本作为输出 但如果从终端运行 则会给出颜色格式化的文本 我需要获取这种颜色格式的文本 到目前为止我已经尝试了一些事情
  • 如何才能将 TCP 连接返回到同一端口?

    机器是 RHEL 5 3 内核 2 6 18 有时我在 netstat 中注意到我的应用程序有连接 建立了 TCP 连接本地地址 and 国外地址是一样的 其他人也报告了同样的问题 症状与链接中描述的相同 客户端连接到本地运行的服务器的端口
  • ssh 连接超时

    我无法在 git 中 ssh 到 github bitbucket 或 gitlab 我通常会收到以下错误消息 如何避免它 输出 ssh T email protected cdn cgi l email protection i ssh
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • ioctl 命令的用户权限检查

    我正在实现 char 驱动程序 Linux 并且我的驱动程序中有某些 IOCTL 命令仅需要由 ADMIN 执行 我的问题是如何在 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL 您可以使用bool capable in
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win

随机推荐

  • Mac Safari 此连接非私人连接

    1 问题 连接公司vpn的时候 Mac弹出此连接非私人连接 点击访问此网站后输入密码将证书手动设为可信后 又弹出了此连接非私人连接 之后进入了无限循环无论怎样都无法访问该网页 2 解决方案 2 1 点击页面上查看此证书 记住证书名字 可以看
  • 自制GUI

    包含了 sqlmap GUI Xray GUI dirmap GUI
  • selenium测试框架快速搭建(UI自动化测试)

    一 介绍 selenium目前主流的web自动化测试框架 支持多种编程语言Java pythan go js等 selenium 提供一系列的api 供我们使用 因此在web测试时我们要点页面中的某一个按钮 那么我们只需要获取页面 然后根据
  • js控制获得焦点与失去焦点样式

    function focusInput focusClass normalClass var elements document getElementsByTagName input for var i 0 i lt elements le
  • Vue项目保存代码之后页面自动更新

    Vue项目保存代码之后页面自动更新 想要在代码中保存之后 页面自动刷新 命令行敲如下代码 npm install webpack dev server 下载了这个东西就不用每次都手动刷新了 我也不知道这个是干嘛的 留在以后研究研究
  • Chromium OS autotest

    autotest三种主要测试手段 直接调用系统命令 相当于直接运行shell命令 通过dbus进行method call 通过加载插件到browser的方式 运行js代码 以js代码来调用C 方法 通过extension来运行js代码 目的
  • XSS闯关——第五关:level5

    第五关 level5 输入语句测试 gt 观察源代码发现字符被替换 把部分字符换成大写尝试 gt 一样的结果 采用html事件方法 失败 同样是字符被替换 使用伪链接方式假造一个超链接尝试 gt a href link a 点击后执行脚本
  • Laravel Collection 常用方法(1)

    我的个人博客 逐步前行STEP 1 first 返回集合第一个通过指定测试的元素 collect 1 2 3 4 gt first 1 collect 1 2 3 4 gt first function value key return v
  • 深度学习deep learning

    一 简介 深度学习是包含多个隐层的机器学习模型 核心是基于训练的方式 从海量数据中挖掘有用信息 实现分类与预测 早期的深度学习模型 编码器 循环神经网络 深度置信网络 卷积神经网络 衍生模型 堆叠降噪自编码器 稀疏自编码器 降噪自编码器 深
  • mysql 集成测试_使用Go进行集成测试的MySQL Docker容器

    使用Go进行集成测试的MySQL Docker容器 原文链接 https itnext io mysql docker container for integration testing using go f784b70a03b 作者 Mi
  • 【Linux】在Xilinx平台上实现UVC Gadget(2)- 解决dwc3驱动bug

    Linux 在Xilinx平台上实现UVC Gadget 2 解决dwc3驱动bug 一 bug描述 二 具体修改方法 1 找到内核源码位置并复制到其他目录 2 Petalinux里面设置使用自定义内核源码 1 选第2个Linux Comp
  • 数列分段

    描述 对于给定的一个长度为N的正整数数列A i 现要将其分成M M N 段 并要求每段连续 且每段和的最大值最小 关于最大值最小 例如一数列4 2 4 5 1要分成3段 将其如下分段 4 2 4 5 1 第一段和为6 第2段和为9 第3段和
  • MySQL查询语句的执行顺序

    SQL语句执行顺序 FROM ON JOIN WHERE GROUP BY AGG FUNC WITH HAVING SELECT UNION DISTINCT ORDER BY LIMIT 在实际执行过程中 每个步骤都会为下一个步骤生成一
  • [django项目] 后台菜单管理功能

    后台菜单管理功能 菜单的管理功能其实就是 对菜单的增删改查 I 业务功能分析 1 gt 业务需求分析 后台首页菜单根据用户权限动态生成 不同菜单对应不同的功能视图 菜单的增删改查 2 gt 功能分析 菜单列表 添加菜单 修改菜单 删除菜单
  • Python Tree库绘制多叉树的用法介绍

    Python Tree库绘制多叉树的用法介绍 Tree 库是一个 Python 的第三方库 这个库主要用于生成树和绘制树的图形 一 安装Tree pip install Tree 使用 Tree 库需要配合 PIL 库来实现绘图 二 官方案
  • Qt控件之QCheckBox复选框控件使用详解

    Qt控件之QCheckBox复选框控件使用详解 在Qt的控件中 QCheckBox是常用的一种复选框控件 用于用户进行多选操作 本篇文章将为大家详细介绍QCheckBox的使用方法 一 QCheckBox控件的创建 在Qt中创建QCheck
  • Windows下配置 MinGW - Gcc、G++构建C++编译环境,并在Notepad++编写C++程序

    win10 64位系统参考博文 MinGW w64安装教程 著名C C 编译器GCC的Windows版本 工具 win7 Notepad MinGW MinGW是什么 MinGW 提供了一套简单方便的Windows下的基于GCC 程序开发环
  • spark的安装与部署

    目录 前言 一 spark是什么 二 知识回顾 1 启动zookeeper 2 启动hdfs和yarn 3 通过jps查看是否启动成功 4 进入MySQL 5 进入hive之后验证 6 启动hbase 7 查看进程 8 进入hbase并测试
  • 数值的整数次方(剑指offer 16)Java快速幂

    目录 一 题目描述 二 思路讲解 三 Java代码实现 四 时空复杂度分析 五 另一种方法 一 题目描述 实现 pow x n 即计算 x 的 n 次幂函数 即 xn 不得使用库函数 同时不需要考虑大数问题 示例 1 输入 x 2 0000
  • GPIO应用编程

    开发平台 正点原子阿尔法开发板 PS 可以用cat sys kernel debug gpio命令查看引脚被占用情况 文章目录 GPIO应用编程 编程步骤 应用编程 遇到的问题 GPIO应用编程 sys class gpio export