qt其他程序启动触摸屏不可用_(2)NXP i.MX6UL GPIO控制程序

点击上方蓝字,关注微联智控工作室

可点击右上角的 …,分享这篇文章

作者使用的i.MX6UL开发板,带有两个LED,可以用来进行GPIO的输出实验。

目标:了解Qt应用程序如何控制GPIO,实现通用的输出控制。

功能:通过点击触摸屏上的按钮,实现LED不同的效果(开/关、心跳灯、硬盘灯)。

应用程序放在ubuntu系统/opt/work/qt-application/002_gpio_ctrl目录下。

i.MX6UL开发板的板载LED的硬件原理图如下所示:

004c84ebb239a25393cd25f9a7c191fa.png

从原理图可以看出,TQ-i.MX6UL使用了GPIO5_IO2和GPIO5_IO7这两个IO口进行LED的驱动,LED为高电平点亮。

一般情况下,如果使用通用的方法,进行嵌入式Linux的GPIO控制,可以通过访问/sys/class/gpio路径下的文件,控制GPIO的方向(输入还是输出),状态(高电平还是低电平)。

以控制GPIO5_IO2为例:

1. 计算对应sys/class/gpio的值GPIOn_IOx = (n-1)*32 + x

GPIO5_IO2=(5 -1)*32 + 2 = 130

2. 将GPIO5_IO2设置为输出。

#通知系统导出控制的GPIO引脚编号

echo  130  >  /sys/class/gpio/export

#控制为输出

echo  "out"  >  /sys/class/gpio/gpio130/direction

#输出为高电平

echo  "1"  >  /sys/class/gpio/gpio130/value

#输出为低电平

echo  "0"  >  /sys/class/gpio/gpio130/value

#通知系统取消导出

echo  130  >  /sys/class/gpio/unexport

3. 将GPIO5_IO2设置为输入。

#通知系统导出控制的GPIO引脚编号

echo  130  >  /sys/class/gpio/export

#控制为输入

echo  "in"  >  /sys/class/gpio/gpio130/direction

这时给该引脚接高电平,输入即为高电平,反之为低电平

#通知系统取消导出

echo 130  >  /sys/class/gpio/unexport

我们不使用以上的方式进行控制,因为内核驱动里面,已经把这两个GPIO的资源用作LED控制,如果强行使用以上方式进行GPIO控制,则系统会提示Device or resource busy,如下图所示:

8ff28ae623ed9e42be7e398852d4e120.png

对于TQ-i.MX6UL平台,由于内核已经封装好LED的驱动程序,并且向应用层提供了LED的控制接口(在 /sys/devices/platform/leds/leds/ 目录下的LED1和LED2),因此,应用程序可以基于这个接口,对相应的LED进行控制。

下面以LED1为例:

/sys/devices/platform/leds/leds/LED1 目录下的文件节点如下图所示:

e38e18ca9c8a7c296e116744342c81f6.png

这里关注两个节点:brightness 和 trigger 。

brightness节点用来控制LED的亮灭,通过对brightness节点写入0或1,可以控制LED的亮灭状态。由于TQ-i.MX6UL的LED接口不是使用PWM方式驱动,因此,brightness节点不支持亮度调节,只支持亮灭控制。

trigger节点用来控制LED不同的触发方式,通过对trigger节点写入不同的状态值,LED可以在不同的状态下进行亮灭显示。

trigger支持的状态值有:

rc-feedback, nand-disk, mmc0, timer, oneshot, heartbeat, backlight, gpio

以下是GPIO应用程序的开发过程

1、先用Qt Creator构建一个工程,命名为:002_gpio_ctrl,关于如何构建工程,请参考“第一个嵌入式QT应用程序”的具体内容。

2、双击打开“widget.ui”文件,构建界面,构建后的界面如下图所示:

3da6983c68bb492bfbb7c768274e6a68.png

3、关于LED的具体操作,在编写代码的时候,使用面向对象的思想,我们使用一个类进行封装,这个类封装了各种关于LED控制的方法。(具体细节请下载源码),如下图所示:

1326b47301b303dd69d2fbd9dc1056c5.png

4、在Linux系统中一切皆文件,所以,我们可以用普通访问文件的方法来进行LED的控制,在Qt中,可以使用QFile类进行文件访问控制。

e3de39b6bfc38ca432829c0de100e8b0.png

5、代码编写完成后,编译,并下载到开发板运行。

-- END --


欢迎关注 --- 微联智控工作室

31865ebe6d53f3bd9b32a1f7f742106b.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值