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

       第三方提供的类,下载到的文件为qextserialport-1.2win-alphaqextserialbase.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.hwin_qextserialport.cpp win_qextserialport.hqextserialport.cpp qextserialport.h这六个文件

 

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

   #include"win_qextserialport.h"

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

    Win_QextSerialPort*myCom;//声明指针对象

    void readMyCom();//声明读串口槽函数

     在函数中设置串口参数:

Struct PortSettings myComSetting = { 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()));//信号和槽函数关联,当串口缓冲区有数据时,进行读串口操作

构造读串口的槽函数:

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

 

 

 

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

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

 

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

头文件中:

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

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

在函数中:

在函数中设置串口参数:

        Struct PortSettingsmyComSetting = { BAUD115200DATA_8PAR_NONESTOP_1FLOW_OFF200 };//定义一个PortSettings类型的结构体,用来存放串口各个参数,PortSettingsqextserialbase.h中定义

myCom=newPosix_QextSerialPort("/dev/ttyUSB0",myComSetting,QextSerialBase::Polling);//注意Linux下的串口文件是在根目录里面的dev中,定义串口对象,并传递参数,在构造函数里对其进行初始化,使用查询方式

myCom->open(QIODevice::ReadWrite);//以可读写方式打开串口



 

posix_qextserialport.cpp中修改setTimeout参数:

将原来的 setTimeout(Settings.Timeout_SecSetting.Timeout_Millisec);

改成setTimeout(Settings.Timeout_Millisec);

QByteArraytemp=myCom->readAll();//读缓冲区的数据
ui->textBrowser->insertPlainText(temp);//在浏览窗口中显示数据
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值