QT5自带库实现高波特率 (256000 460800 1382400 )

概述

最近进行QT串口开发时,115200波特率太慢满足不了需求,所以寻求高波特率实现方式。开发环境为Windows QT5.8(MinGW5.3)。QT5自带QtSerialPort类中,最高定义波特率为115200。尝试使用外部库qextserialport,但是缺乏维护,使用并不友好。

实现

在QT自带QtSerialPort中,在QtSerialPort.文件中有如下定义

enum BaudRate {
    Baud1200 = 1200,
    Baud2400 = 2400,
    Baud4800 = 4800,
    Baud9600 = 9600,
    Baud19200 = 19200,
    Baud38400 = 38400,
    Baud57600 = 57600,
    Baud115200 = 115200,
    UnknownBaud = -1   
};

并无所需要的波特率,但是经测试,在底层库中已经包含多种波特率定义,既要实现相应波特率在上述枚举中添加相应波特率定义即可。如下

enum BaudRate {
    Baud1200 = 1200,
    Baud2400 = 2400,
    Baud4800 = 4800,
    Baud9600 = 9600,
    Baud19200 = 19200,
    Baud38400 = 38400,
    Baud57600 = 57600,
    Baud115200 = 115200,
    Baud256000 = 256000,
    Baud1382400 = 1382400,
    UnknownBaud = -1   //支持自定义
};

添加完成后即可调用相应波特率。实现高波率通信,实验程序如下。

QSerialPortInfo com;
QSerialPort *serial;
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
    com = info;
}
if(!com.isNull())
{
    qDebug() <<  com.portName();
    qDebug()<< com.description();
    serial = new QSerialPort;
    serial->setPortName("COM4");
    if(serial->open(QIODevice::ReadWrite))
    {
      serial->setBaudRate(QSerialPort::Baud1382400);
      serial->setDataBits(QSerialPort::Data8);
      serial->setParity(QSerialPort::NoParity);
      serial->setStopBits(QSerialPort::OneStop);
      serial->setFlowControl(QSerialPort::NoFlowControl);
      sendata.resize(3);  sendata[0]=0xfe; sendata[1]=0x03;  sendata[2]=0x0c;
      serial->write(sendata);
      while(serial->waitForBytesWritten());
      qDebug()<<"sucess"  ;
      serial->close();
    }
}

通过foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())扫描当前可用串口,在打开串口后设置相应参数。如上述代码中Baud1382400已经足够高,经过测试常用高波特率均测试通过正常通信,但是同下位机通信不宜设置过高,以防干扰,数据不准确,上文Baud1382400仅作为测试使用。

### 回答1: Qt是一款非常优秀的跨平台应用程序开发框架,它提供了丰富的组件和工具,其中包括串口通信模块,可以方便地实现串口的读写操作。在Qt官方文档中,有关于串口通信模块的文档,用户可以根据文档中的说明,将其集成到自己的Qt项目中。 但是,如果用户想要使用Qt自带串口通信模块进行开发,需要编写一个完整的工程。在这个工程中,用户需要通过Qt Creator创建一个新的Qt项目,并添加串口通信模块的相关头文件。接下来,用户需要编写相应的代码,以实现串口的初始化、读取和写入操作。 在串口初始化的过程中,用户需要指定串口的参数,例如波特率、数据位、校验位和停止位等,并打开串口。在串口读取的过程中,可以使用Qt提供的QSerialPort类中的readyRead()信号来读取串口数据。而在串口写入的过程中,用户可以使用QSerialPort类中的write()函数来发送数据给串口外设。 需要注意的是,在进行串口通信时,用户要根据实际情况进行错误处理。例如,如果初次打开串口失败,则需要提醒用户进行检查,确保串口是否被其他程序占用,或者是否连接错误等。 总之,利用Qt自带串口通信模块进行开发,是一种非常方便、快捷的方式,可以大大减轻用户的编程难度,优化开发效率。 ### 回答2: Qt是一个跨平台的C++应用程序开发框架,其支持串口通信。Qt提供了一个十分方便的串口通信模块,可以很轻松地实现应用程序的串口通信功能。 下面是关于qt自带串口通信模块完整工程的介绍: 首先,在Qt Creator中创建一个新的Qt Widgets应用程序项目。 然后,在mainwindow.cpp文件中引入QSerialPort头文件,进行串口通信相关的操作。在构造函数中使用QComboBox和QPushButton创建下拉菜单和按钮,用于选择串口号和打开串口。同时,还可以设置串口通信的波特率、数据位、校验位、停止位等参数。 接下来,在按钮的槽函数中,进行串口打开、关闭及数据的读取和写入。使用QByteArray和QTextStream等类处理串口数据,以实现数据的收发功能。同时,还可以通过QTimer定时发送数据,或者通过QThread创建新的线程来处理串口通信。 最后,在窗口关闭时,及时释放串口资源和关闭线程,可以避免程序出现不必要的错误。 总体来说,Qt自带串口通信模块完整工程非常方便实用,通过简单的代码编写,就可以实现串口通信的功能。使用该模块,可以快速构建串口通信应用程序,这对于需要与外部硬件设备进行通信的应用场景非常有用。 ### 回答3: qt自带串口通信模块完整工程包含了实现串口通信的源码和界面设计。该工程可以用于在qt平台下实现串口通信功能。该工程包含以下文件: 1. main.cpp: 包含了Qt程序的基本结构,并且启动了窗口。 2. serialport.h 和serialport.cpp: 定义了串口通信类SerialPort,其中包含了各种串口通信的成员函数,如打开串口、关闭串口、发送数据、接收数据等等。 3. mainwindow.h 和mainwindow.cpp: 定义了窗口类MainWindow,通过调用SerialPort类的成员函数实现串口通信的各个功能。MainWindow类建立了一个界面,用于与用户交互,包括显示接收到的数据、设置串口参数、发送数据等。 4. mainwindow.ui: 界面设计文件,主要包含MainWindow类的界面设计,可以使用Qt Designer进行编辑。 该工程使用Qt Creator进行管理,可以直接打开进行编译。使用该工程可以方便地实现串口通信功能,并且已经实现了基本的错误处理,提了代码的稳定性和可靠性。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值