首页 > 其他分享 >/sys/class/gpio/连续读取gpio引脚电平有问题的原因

/sys/class/gpio/连续读取gpio引脚电平有问题的原因

时间:2023-10-18 17:45:18浏览次数:37  
标签:引脚 value sys fd printf gpio

一、通过shell命令读取引脚电平值

/sys/class/gpio/目录下的内容

 可以向export写入相应引脚输出来导出gpio, 例如 echo 66 > export

 进入gpio66下,读取value的值即为gpio输入的值(默认为输入)

二、通过C程序读取引脚电平值 

程序:

int main(int argc, char *argv[])
{
    int fd, retvalue;
    char *filename = "/sys/devices/platform/apb/10010000.pinctrl/gpio/gpio66/value";
    char gpio_in_value;

    if (access(filename, F_OK))
        system("echo 66 > /sys/class/gpio/export");

    fd = open(filename, O_RDWR);
    if(fd < 0){
        printf("file %s open failed!\r\n", argv[1]);
        return -1;
    }

    read(fd, &gpio_in_value, 1);
    printf("gpio in value:%d.\r\n", gpio_in_value);

    read(fd, &gpio_in_value, 1);
    printf("gpio in value:%d.\r\n", gpio_in_value);

    retvalue = close(fd);
    if(retvalue < 0){
        printf("file %s close failed!\r\n", argv[1]);
        return -1;
    }
    return 0;
}

执行结果为:

 引脚的的值读上来应该是0或1, 转成16进制为 0x30或0x31, 即48或49。而第二次都上来的是10,说明程序有问题。

正确的程序如下,第二次读的时候需要使用lseek:

int main(int argc, char *argv[])
{
    int fd, retvalue;
    char *filename = "/sys/devices/platform/apb/10010000.pinctrl/gpio/gpio66/value";
    char gpio_in_value;

    if (access(filename, F_OK))
        system("echo 66 > /sys/class/gpio/export");

    fd = open(filename, O_RDWR);
    if(fd < 0){
        printf("file %s open failed!\r\n", argv[1]);
        return -1;
    }

    read(fd, &gpio_in_value, 1);
    printf("gpio in value:%d.\r\n", gpio_in_value);

    lseek(fd, 0, SEEK_SET);
    read(fd, &gpio_in_value, 1);
    printf("gpio in value:%d.\r\n", gpio_in_value);

    retvalue = close(fd);
    if(retvalue < 0){
        printf("file %s close failed!\r\n", argv[1]);
        return -1;
    }
    return 0;
}

此时可以连续多次的读引脚状态:

 

标签:引脚,value,sys,fd,printf,gpio
From: https://www.cnblogs.com/-tbd-/p/17772944.html

相关文章

  • kubeadm init 报错ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables
    现象:[ERRORFileContent--proc-sys-net-bridge-bridge-nf-call-iptables]:/proc/sys/net/bridge/bridge-nf-call-iptablescontentsarenotsetto1原因:  /proc/sys/net/bridge/bridge-nf-call-iptables 文件的内容并没有设置为1解决方案echo"1">/proc/sys/net/br......
  • 用system账户修改过Oracle密码期限,改成unlimited 后来新建的账户的密码期限也是unlimi
    https://www.cnblogs.com/hooly/p/14171716.htmlhttps://blog.csdn.net/wang13145/article/details/106660266用system账户修改过Oracle密码期限,改成unlimited后来新建的账户的密码期限也是unlimited吗?......
  • Qt 文件目录操作 QDir、QFile、QTemporaryDir/File、QTextStream、QDataStream、QSett
    摘要:  这一篇Qt博文主要介绍在Qt开发中对于文件目录操作相关处理的时候可以用到哪些类,这些类的作用是什么,大致应该怎么用,类的常用类方法及相关需要注意的事项等等,更加细致的需根据类名查找翻阅官方帮助文档。  QT提供的与文件和目录操作相关的类有以下几个:QDir:类提供对......
  • System.TypeLoadException:“程序集“XXXX.K3.SCM.App.Core, Version=1.0.0.0, Cultur
    一、问题描述:网站页面调用方法时报错:报错内容如下:System.TypeLoadException:“程序集“XXXX.K3.SCM.App.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中的类型“XXXX.K3.SCM.App.Core.StockService”的方法“WriteBackAfterByInWhenAudit”没有实现。”......
  • STM32——GPIO输出
    一、结构二、8种模式三、对推挽输出、开漏输出的理解1、推挽输出:推:将电流推出去    挽:将电流挽回来 上图的前两种情况组合,就是推挽输出模式。情况1时即“推”,情况2时即“挽”。2、开漏输出:漏:漏极啥也没接。情况2与3组合构成开漏模式。(常配一个外接上拉电阻)......
  • docker部署elasticsearch 遇到FileSystemException 报错
    Exceptioninthread"main"java.nio.file.:/usr/share/elasticsearch/config/elasticsearch.yml.vxt5sWMES_eRFvPQPfckLQ.tmp->/usr/share/elasticsearch/config/elasticsearch.yml:Deviceorresourcebusy atjava.base/sun.nio.fs.UnixException.trans......
  • System
    packagecom_black.System;publicclassSystemDemo01{publicstaticvoidmain(String[]args){System.out.println("开始");System.exit(0);//调用此方法会直接终止虚拟机,即后面内容不执行System.out.println("结束");//此时不输出结束......
  • Windows Server 2016 OVF, updated Oct 2023 (sysin) - VMware 虚拟机模板
    WindowsServer2016OVF,updatedOct2023(sysin)-VMware虚拟机模板2023年10月版本更新,现在自动运行sysprep,支持ESXiHostClient部署请访问原文链接:https://sysin.org/blog/windows-server-2016-ovf/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org现在......
  • Windows Server 2019 OVF, updated Oct 2023 (sysin) - VMware 虚拟机模板
    WindowsServer2019OVF,updatedOct2023(sysin)-VMware虚拟机模板2023年10月版本更新,现在自动运行sysprep,支持ESXiHostClient部署请访问原文链接:https://sysin.org/blog/windows-server-2019-ovf/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgWind......
  • C2000 系列DSP使用Syscfg配置CLB模块记录
    1.1、SysConfig配置1、在工程下新建一个syscfg文件。注意文件的后缀名是.syscfg,命名任意。这时候会弹出一个弹窗,点击yes将SysConfig添加到该工程的toolchain。2、可以看到工程下多了一个GeneratedSource,并且打开工程属性,Build下也新加了SysConfig......