基于linux和Qt的串口通信调试器调的设计及应用
摘要:目前基于Linux操作系统的应用开发越来越广泛,Qt是一个跨平台的C++图形用户界面应用程序框架,它可以开发基于Linux上的图形应用程序。Linux操作系统对串行口提供了很好的支持,为了在Linux系统下能让串口与其它硬件设备方便直观地进行通信,本文介绍了在Ubuntu10.10系统平台Qt-4.7及Qt Creator2.0编程环境下串口调试界面的设计及程序的编写。
关键词:串口通信 Linux QT
1 Qextserialport 类介绍
在Qt类库中并没有特定的串口基础类,现在很多人使用的是第三方写的qextserialport类,它是一个跨平台的串口类,可以很方便地在Qt中对串口进行读写操作。本文也使用了该类。文件下载地址:
sourceforge/projects/qextserialport/files/
下载到的文件名为qextserialport-1.2win-alpha。在linux平台中,我们只需用到其中的四个文件:q
extserialbase.cpp和qextserialbase.h以及posix_qextserialport.cpp和 posix_qextserialport.h。其中前两个文件定义了一个QextSerialBase 类,它提供了操作串口所必需的一些变量和函数等;后两个文件定义了一个Posix_QextSerialPort 类,Posix_QextSerialPort类添加了Linux平台下操作串口的一些功能。
2 串口的基本设置
串口的基本参数在posix_qextserialport.cpp文件里的构造函数中进行设置,它的最后一个构造函数:
Posix_QextSerialPort::Posix_QextSerialPort(const QString & name, const PortSettings&settings, QextSerialBase::QueryMode mode)它共有3个参数,第一个是串口名,第二个是对串口参数的基本设置,第三个是读取串口的方式。对于第二个参数PortSettings的类型,在qt进程间通信qextserialbase.h文件中有一个结构体:struct PortSettings 这个结构体里定义了串口初始化的各个参数。而对于BaudRateType等枚举类型,同样在qextserialbase.h文件中有定义。对于第三个参数,在QextSerialBase类中涉及到了一个枚举变量QueryMode。它有两个值Polling和EventDriven。QueryMode指的是读取串口的方式,在Windows下支持以上两种模式,
而在Linux下只支持Polling模式。
3 设计界面
本文是在Ubuntu10.10系统平台Qt-4.7及Qt Creator2.0编程环境下完成了串口调试界面的设计及程序的编写。Qt Creator是跨平台的Qt IDE,它的设计目标是使开发人员能够利用Qt这个应用程序框架更加快速及轻易的完成开发任务。
首先在Qt Creator中新建工程,添加Qextserialport类中的四个文件,然后点击mainwindown.ui就可以对界面进行设计了。该界面主要涉及到5种类:QTextBrowser,QLineEdit,QPushButton,QComboBox,QLabel。其中的Text Browser控件用来显示接收到的数据,LineEdit控件实现写字符串,也就是输入用户需要发送的信息,PushButton控件通过点击信号发出命令, 计算机执行相应的动作;ComboBox控件通过点击信号弹出选择的项目列表, 用户选择当前所需要的选项;Label控件用于显示标签。
4 添加驱动
串口操作的基本流程是:1设置串口参数;2选择串口;3打开串口;4读或写串口;5关闭串口。界面
中的按钮与实现它的代码是通过信号和槽机制实现的。使用Qt Creator可以免去手工写代码的方式去建立信号和槽的关系。在界面的按钮上右击,选择go to slot选项,然后选择clicked()选项,就可以进入它的单击事件槽函数中,可以在槽函数中添加实现功能的代码。还可以根据ComboBox控件选择的参数,添加实现设置串口参数的代码,下面是设置波特率的部分代码:
if(ui->baudRateComboBox->currentText()==tr(“9600”)) linCom->setBaudRate(BAUD9600);
else if(ui->baudRateComboBox->currentT
ext()==tr(“115200”))linCom->setBaudRate(BAUD115200);
在此设置了9600,115200两种波特率,其他波特率可以根据用户的需要来添加。因为在Linux 下只支持Polling模式,所以在构造函数中添加代码:
linCom=newPosix_QextSerialPort(portName,QextSerialBase::Polling);
在Polling模式中,串口读写函数是同步执行的,信号不能工作在这种模式下,而下的开销较小。我们需要自己建立定时器来读取串口的数据:readTimer=newQTimer(this);readTimer->start(100); //设置延时为100ms
connect(readTimer,SIGNAL(timeout()),this,SLOT(readMyCom())); 这里将信号和槽函数关联,延时一段时间,进行读串口操作。此时运行程序,便可以正常收发数据了。
5 结语
该串口调试软件已经成功地实现了Linux系统下带图形界面的串口数据传输, 极大提高了在Linux下串口调试的效率。
参考文献
[1] 闫锋欣,曾泉人,张志强译.JasminBlanchette,MalkSummerfield.C++GUI Qt4 编程(第二版)[M].北京:电子工业出版社.
[2] 蔡志明,卢传富,李立夏.精通Qt4编程[M].北京:电子工业出版社.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论