toradex的个人空间 https://blog.eetop.cn/1539194 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

嵌入式Linux基于Qt开发串口应用

已有 1360 次阅读| 2017-4-14 11:30 |系统分类:芯片设计

By Toradex秦海

1). 简介

基于Embedded Linux系统的嵌入式设备使用跨平台GUI开发工具Qt来开发嵌入式应用已经非常普遍,本文就以分别通过原生C语言方式和使用Qt QSerialPort控件方式来进行RS232/RS485串口应用的开发示例。

 

本文所演示的平台来自于Toradex Colibri iMX6DL ARM嵌入式平台,这是一个基于NXP iMX6DL ARM处理器,支持双核Cortex-A9

 

 

2. 准备

a). Colibri iMX6DL ARM核心版配合Colibri Eva Board载板,连接调试串口UART1到开发主机方便调试。

 

b). Colibri iMX6DL系统使用基于OpenEmbedded框架重新编译的集成Qt5.5 Toradex Linux image releaseV2.6.1版本以及对应的SDK.这个可以结合这里的说明自己进行编译也可以通过这里直接下载编译好的imageSDK文件,image更新方法请参考这里

 

c). 关于开发主机SDK安装和qtcreator开发环境的配置请参考之前发布的《嵌入式Linux基于Qt开发GPIO应用一文》。

 

 

3). 串口硬件连接

a). Colibri iMX6S核心版默认定义提供了三个串口,如下所示,其中UART1为默认的调试串口,当然可以通过uboot设置关闭调试串口或者指定另外一个串口作为调试串口。

 

b). Colibri Eva Board X25 Top DB9连接器默认为UART2接口RS232电平输出,可以连接到Ubuntu开发主机进行UART2串口测试。另外,通过载板跳线测试也可以将UART3串口路由到X25 bottom DB9连接器上面,具体说明可以参考这里

 

c). Colibri iMX6 UART除了RS232模式,也支持RS422/485模式,这里还是利用UART2来测试RS485半双工模式通讯,基于Colibri Eva Board的硬件连接如下:

./ Colibri Eva Board连接器X2 bottom DB9 管脚4RXD+),管脚5RXD-)以及管脚1GND)和PC主机485接口设备对接

./ Colibri Eva Board下面几个跳线做如下设置:

   JP11 短接 – 485接口可以发送以及接收收据,如果断开,则只能发送数据

   JP12JP14断开 – 用于插入120ohm终端电阻,针对RS-422模式

   JP13JP15短接 – 设置为半双工模式,如果断开,则为全双工模式

   JP16短接 – UART2RS232的功能关闭,切换到RS485功能;断开则反之。

 

 

4). RS485功能使能方法

a).device tree中使能,。

//参考这里下载Toradex Linux kernel V2.6版本源代码,根据如下patch文件修改arch/arm/boot/dts/imx6dl-colibri-eval-v3.dts文件,并参考这里编译新的dtb文件后部署到Colibri iMX6模块上。

https://github.com/simonqin09/uarttest/blob/master/485.patch

这种使能后在应用程序就不需要针对485做使能处理了。

 

b). 利用ioctrl TIOCSRS485在应用程序中使能,具体代码可以参考下面实例。

 

 

5). 基于原生C语言操作串口Qt widget应用示例

a). Qtcreator 创建一个新项目”uarttest”, New Project-> Applications -> Qt Widgets Application -> Location (任意) -> Kit (针对Colibri imx6kit) -> Class Information (默认)

 

b). 在项目中首先添加串口基本操作的headersource文件

./ Header 文件代码如下,主要定义一些全局环境变量和声明UART基本的操作函数

https://github.com/simonqin09/Qtuarttest/blob/master/uartconfig.h

./ source文件代码如下,主要是UART基本操作函数,包含open/close, config, 485 enable,read, write等。

https://github.com/simonqin09/Qtuarttest/blob/master/uartconfig.cpp

 

c). 进入Forms -> mainwindow.ui, 如下编辑界面同时通过”go to slot”添加”SendButton”, ”ReceiveButton””SubmitButton””clicked”动作函数。

 

d). 修改mainwindow headersource文件实现UART串口的打开,配置以及读取控制

./ Hearder文件代码如下,声明界面buttonslineeditslable变量以及串口控制所需的全局变量

https://github.com/simonqin09/Qtuarttest/blob/master/mainwindow.h

./ source文件代码如下在窗口初始化的时候先隐藏”Send””Receive” button以及对应的输入输出框,先根据Lable输出提示输入需要调试的UART设备名,点击”Submit”按键会完成打开并配置串口的操作,这里串口配置参数为”1152008N1”,同时显示发送接收按钮,可以分别点击实现发送和接收功能测试。

https://github.com/simonqin09/Qtuarttest/blob/master/mainwindow.cpp

./ 注意,默认是通过” uart_485()”  ” void MainWindow::on_SubmitButton_clicked()” 中使能了485模式,如果测试RS232或者通过device tree方式使能了485,则可以将这部分注释掉

 

e). 编译应用程序将编译好的可执行文件scp复制到Colibri iMX6模块系统上面执行,效果如下:

 

 

6). 基于QSerialPort控件操作串口Qt widget应用示例

a). Qtcreator 创建一个新项目”qtserialtest”, New Project-> Applications -> Qt Widgets Application -> Location (任意) -> Kit (针对Colibri imx6kit) -> Class Information (默认)

 

b). 编辑界面保持和上面5章节应用界面完全一致。

 

c). 修改mainwindow headersource文件实现UART串口的打开,配置以及读取控制

./ Hearder文件代码如下,区别主要是添加了”QSerialPort””QTimer”头文件和相关变量,以及两个槽函数”void uartread()””void readtimeout()”

https://github.com/simonqin09/qtserialtest/blob/master/mainwindow.h

./ source文件代码如下同样在窗口初始化的时候先隐藏”Send””Receive” button以及对应的输入输出框,先根据Lable输出提示输入需要调试的UART设备名,点击”Submit”按键会通过QSerialPort控件相关操作函数打开并配置串口,这里串口配置参数为”1152008N1”,同时显示发送接收按钮,然后可以分别点击实现发送和接收功能测试。

https://github.com/simonqin09/qtserialtest/blob/master/mainwindow.cpp

./ 注意,如果测试RS485,需要通过上面章节4第一种方法通过device tree使能485

./ 通过对比可以发现,通过QSerialPort控件操作更简单,其定义了很多现成的操作可以实现非常方便的串口操作,尤其在Receive方面,通过”SIGNAL(readyRead())”Slot(uartread())”函数的connect以及”SIGNAL(timeout())”Slot(readtimeout())”函数的connect,非常方便的实现了数据接收和Timeout延时的处理。

 

d). 编译部署执行结果和上面章节5类似。

 

 

7). 总结

本文基于NXP iMX6嵌入式平台在嵌入式linux系统下测试基于Qt开发UART通信应用,对比了使用原生C代码从底层操作UART设备和使用QSerialPort控件操作UART


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 3

    粉丝
  • 0

    好友
  • 1

    获赞
  • 2

    评论
  • 13923

    访问数
关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-19 16:26 , Processed in 0.020986 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部