Qt串口通信

Posted __2017__

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt串口通信相关的知识,希望对你有一定的参考价值。

一、简介

随着物联网、智能化的浪潮,加上嵌入式设备硬件资源的限制,越来越多的通信模块开始倾向于串口,比如WiFi模块、BT模块、ZigBee模块等等。 串口的特点:
1、通用。由于串口的悠久历史,就连8位机51都必含串口。
2、易用易调试。硬件上来说,Rx/Tx/GND搞定;软件上,读写串口同样相当简易。而且,由于串口的普及,我们可以极其方便的结合PC上的串口工具辅助调试。
3、稳定。

基于以上原因,在开发中经常需要调试串口通信,所以写了个小的串口通信demo。由于串口之上的协议各不相同,所以只提供基本的读写数据功能。


二、编译

如果使用qt-opensource-windows-x86-mingw491_opengl-5.4.0.exe,那么直接clone代码即可编译运行,UI如下:



三、Qt串口编程注意事项

在接收串口数据时:

void PortSettingDialog::onDataRecv()

    const qint64 bytesAvailable = mUartCom->bytesAvailable();
    if (bytesAvailable == 0)
        return;

    QByteArray readData = mUartCom->readAll();
    const char *rxBuffer = readData.data();

    updateRecvUI(rxBuffer, bytesAvailable);
bytesAvailable()方法的返回值bytesAvailable可能比readData.size()小,所以如果使用bytesAvailable进行数据处理的话(如上面代码段),无疑会遗漏数据,自然这是错误的。所以我们不能使用bytesAvailable()丈量数据长度,正确的串口数据接收方式:
void PortSettingDialog::onDataRecv()

    QByteArray readData = mUartCom->readAll();
    if (readData.size() == 0)
        return;

    const char *rxBuffer = readData.data();
    updateRecvUI(rxBuffer, readData.size());

GitHub地址

以上是关于Qt串口通信的主要内容,如果未能解决你的问题,请参考以下文章

qt串口设置停止位出现

Qt串口通信开发之QSerialPort模块

QT开发(五十)——QT串口编程基础

QT开发(五十)——QT串口编程基础

Qt串口通信

Qt串口通信