自学Qt之路——串口编程(使用第三方提供的类)

第三方提供的类,下载到的文件为qextserialport-1.2win-alpha,qextserialbase.cpp和qextserialbase.h文件定义了一个QextSerialBase类,win_qextserialport.cpp和win_qextserialport.h文件定义了一个Win_QextSerialPort类,posix_qextserialport.cpp和posix_qextserialport.h文件定义了一个Posix_QextSerialPort类,qextserialport.cpp和qextserialport.h文件定义了一个QextSerialPort类。

在其中提供了串口的两个驱动方式,一个是EventDriven事件驱动方式,另一个是Polling查询方式。EventDriven事件驱动方式,一旦有数据到来,就会发出readyRead()信号,我们可以关联该信号来读取串口的数据。在事件驱动的方式下,串口的读写是异步的,调用读写函数会立即返回,它们不会冻结调用线程。

Polling查询方式,读写方式是同步执行,信号不能在这种模式下工作,而某些功能就无法实现。但是这种模式下的开销较小,我们需要建立自己的定时器来读取串口数据。

有一条非常重要:在Window下两种模式都能支持,但是在linux下只能是Polling方式。

一、在windows下使用事件驱动方式:

在工程中添加qextserialbase.cpp和qextserialbase.h,win_qextserialport.cpp和win_qextserialport.h,qextserialport.cpp和qextserialport.h这六个文件

 

在头文件中把win_qextserialport.h包含进去

#include "win_qextserialport.h"

在头文件中声明私有对象和私有槽函数:

Win_QextSerialPort *myCom; //声明指针对象
void readMyCom(); //声明读串口槽函数

在函数中设置串口参数:

Struct PortSettingsmyComSetting = {BAUD115200,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,200};//定义一个PortSettings类型的结构体,用来存放串口各个参数,PortSettings在qextserialbase.h中定义
myCom = new Win_QextSerialPort("COM4", myComSetting, QextSerialBase::EventDriven);//定义串口对象,并传递参数,在构造函数里对其进行初始化,使用事件驱动方式
myCom-> open(QIODevice::ReadWrite);//以可读写方式打开串口
connect(myCom, SIGNAL( readyRead()), this, SLOT( readMyCom()));//信号和槽函数关联,当串口缓冲区有数据时,进行读串口操作

构造读串口的槽函数:

void MainWindow::readMyCom()//读串口函数
{
QByteArray temp = myCom->readAll();
ui->textBrowser->insertPlainText(temp);//在浏览窗口中显示数据
}

二、linux上使用polling查询方式:

在工程中加入qextserialbase.cpp和qextserialbase.h,posix_qextserialport.cpp和posix_qextserialport.h这四个文件

 

程序的串口设置跟Windows差不多,

头文件中:

将以前的#include"win_qextserialport.h"更改为#include"posix_qextserialport.h"

将以前的Win_QextSerialPort*myCom;更改为Posix_QextSerialPort*myCom;

在函数中:

在函数中设置串口参数:

StructPortSettingsmyComSetting={BAUD115200,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,200};//定义一个PortSettings类型的结构体,用来存放串口各个参数,PortSettings在qextserialbase.h中定义
myCom= new Posix_QextSerialPort("/dev/ttyUSB0",myComSetting,QextSerialBase::Polling);//注意Linux下的串口文件是在根目录里面的dev中,定义串口对象,并传递参数,在构造函数里对其进行初始化,使用查询方式
myCom->open(QIODevice::ReadWrite);//以可读写方式打开串口

posix_qextserialport.cpp中修改setTimeout参数:

将原来的setTimeout(Settings.Timeout_Sec,Setting.Timeout_Millisec);

改成setTimeout(Settings.Timeout_Millisec);

QByteArray temp = myCom->readAll();//读缓冲区的数据
ui->textBrowser->insertPlainText(temp);//在浏览窗口中显示数据


 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值