基于QT的arm板GPIO的检测系统的设计

        General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,人们利用工业标准I2C、SMBus或SPI接口简化了I/O口的扩展。当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能。

在嵌入式开发中,arm越来越普及,GPIO的扩展和使用也越来越多,因此它是否能正常工作对于我们使用的重要性不言而喻,因此我们在使用前必须得先判断GPIO是否正常,鉴于传统的检测方案,操作复杂而且效率低,检测的成本大,数据分析也不精确,因此开发一款操作方便的GPIO检测系统迫在眉睫。

本系统是基于LINUX环境开发的,主要的开发工具是QT,因为QT不但可以直接设计界面,而且还很方便。

         在我的这个系统中,其中最主要的功能就是GPIO的读写,相对功能比较明确也比较简单,只要将GPIO的读写搞清楚了,其余的设计就看自己设计,我主要设计的是读15个GPIO的值,本来有16个GPIO的,但是有一个是电源的GPIO,没有用来传输数据,所以在这里只用到了15个,当然这个是核心板外设的接口,每个板的设计和原理图也都不一样,所以这里就不做简单的介绍了,我们直接来看一下读取GPIO代码的实现。

      如果想要读取GPIO的数据,首先我们得打开GPIO所在的文件,然后进行操作。这里就以我的为列,

       cd     /sys/class/gpio/        打开文件所在的目录 

       echo 165 > export        输入165到GPIO3    我的165是电源接口

       cd  gpio165/       打开gpio165目录

     echo out > direction   输出out到direction里面

     echo 1 > value       给165口高电平 让他处于打开状态

     echo 0 > value       给他低电平   让他处于关闭状态

    这是操作GPIO的代码 ,在QT中的代码的主要实现是

        fd = open(EXPORT,O_WRONLY);
        if(fd == -1)
        {
            printf("open fail\n");
            return;
        }
        ret = write(fd,GPIO[i],sizeof(“165”));
        if(ret == -1)
        {
            printf("write gpio[%s] fail\n",165);
        }
        fd = open( "/sys/class/gpio/gpio165/direction",O_RDWR);
        if(fd == -1)
        {
            printf("open file error.\n");
            return ;
        } 
            memset(buf,0,SIZE);
            ret = read(fd,buf,SIZE);
            if(buf != OUT)
            {
                ret = write(fd,"out",sizeof("out"));
                if(ret == -1)
                {
                    printf("write out fail\n");
                }
            }
        }

这就是我操作GPIO的代码的实现,虽然这个只是165一个电源GPIO的实现,但是呢其他的也都差不多,就只是将输出“out”改为“in”就OK了。

最后就是再此功能的基础上的扩展了,我数据主要是读到GPIO所用的时间,然后将时间进行各种处理,比如最大值,最小值,将数据写入sqlite数据库,还有就是当地的时间,我的时间使用ntp实现的,所以时间比较准确,当然也还有其他的方法,时间准确的好处是在做掉电处理的时候计算的掉电时间准确,丢失的数据就知道了。GPIO这个项目的大体功能就是这样,希望对有需要的人有所帮助。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值