• 【转】QT 串口QSerialPort + 解决接收数据不完整问题


    类:QSerialPort

    例程:ExamplesQt-5.9.1serialport erminal,该例子完美展示了qt串口收发过程,直接在这上面修改就可以得到自己的串口软件。核心方法

    //读串口
    QByteArray QSerialPort::readAll()
    //写串口
    qint64 QSerialPort::write(const QByteArray &data)
    1
    2
    3
    4
    注意事项:qt默认最大支持115200波特率,可以通过修改Qt5.9.15.9.1msvc2013_64includeQtSerialPortqserialport.h

    enum BaudRate {
    Baud1200 = 1200,
    Baud2400 = 2400,
    Baud4800 = 4800,
    Baud9600 = 9600,
    Baud19200 = 19200,
    Baud38400 = 38400,
    Baud57600 = 57600,
    Baud115200 = 115200,
    Baud256000 = 256000, //添加256000波特率
    UnknownBaud = -1
    };
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    qt底层是调用windows sdk api,其支持256000波特率

    调试相关:使用虚拟串口软件vspd辅助调试

    解决接收数据不完整问题

    转:贴吧 http://tieba.baidu.com/p/3699753033?pn=2 45楼

    1、不完整的原因:分开多次接收,这个你很难控制得了
    2、解决办法:首先严格定义头部和尾部;然后把处理逻辑写完整,一个都不能漏
    3、下面定义头部为”{“,尾部为”}”,变量类型全部为QByteArray

    BufferData = MySerialPort->readAll();
    //异常类:无头且变量为空,已丢失头部,数据不可靠,直接返回
    if ((!BufferData.contains("{"))&(PasteData.isNull()))
    {
    return;
    }
    //第一种:有头无尾,先清空原有内容,再附加
    if ((BufferData.contains("{"))&(!BufferData.contains("}")))
    {
    PasteData.clear();
    PasteData.append(BufferData);
    }
    //第二种:无头无尾且变量已有内容,数据中段部分,继续附加即可
    if ((!BufferData.contains("{"))&(!BufferData.contains("}"))&(!PasteData.isNull()))
    {
    PasteData.append(BufferData);
    }
    //第三种:无头有尾且变量已有内容,已完整读取,附加后输出数据,并清空变量
    if ((!BufferData.contains("{"))&(BufferData.contains("}"))&(!PasteData.isNull()))
    {
    PasteData.append(BufferData);
    ReadData = PasteData;
    PasteData.clear();
    }
    //第四种:有头有尾(一段完整的内容),先清空原有内容,再附加,然后输出,最后清空变量
    if ((BufferData.contains("{"))&(BufferData.contains("}")))
    {
    PasteData.clear();
    PasteData.append(BufferData);
    ReadData = PasteData;
    PasteData.clear();
    }
    ui.textEdit->setText(ReadData);
    ---------------------
    作者:Kelvin_Ngan
    来源:CSDN
    原文:https://blog.csdn.net/kelvin_yan/article/details/78975147
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    bzoj2161 布娃娃
    bzoj2161 布娃娃
    Tyvj1054
    Tyvj1054
    Tyvj1053
    Tyvj1053
    hdu3265 Poster(扫描线)
    hdu3265 Poster(扫描线)
    hdu3265(好题翻译)
    hdu3265(好题翻译)
  • 原文地址:https://www.cnblogs.com/h2zZhou/p/10168183.html
Copyright © 2020-2023  润新知