类:QSerialPort

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

//读串口
QByteArray QSerialPort::readAll()
//写串口
qint64 QSerialPort::write(const QByteArray &data)
1
2
3
4
注意事项:qt默认最大支持115200波特率,可以通过修改Qt5.9.1\5.9.1\msvc2013_64\include\QtSerialPort\qserialport.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
版权声明:本文为博主原创文章,转载请附上博文链接!

【转】QT 串口QSerialPort + 解决接收数据不完整问题的更多相关文章

  1. delphi SPCOMM 接收数据不完整!该如何解决

    SPCOMM 接收数据不完整!该如何解决   SPCOMM 接收数据不完整!我作了一个 读取地磅数据的程序,是用spcomm接收的! 总共有五台地磅,其他4台地磅数据读取都正常.但是有一台接收数据的时 ...

  2. SPCOMM 接收数据不完整!该如何解决

    SPCOMM 接收数据不完整!该如何解决   SPCOMM 接收数据不完整!我作了一个 读取地磅数据的程序,是用spcomm接收的! 总共有五台地磅,其他4台地磅数据读取都正常.但是有一台接收数据的时 ...

  3. Qt串口通信接收数据不完整的解决方法

    在使用串口接收数据时,当数据量大的时候会出现数据接收不完整的情况.因为串口数据获取函数readAll()由readyRead()信号触发,但readyRead()信号在串口读到起始标志时立即发送,并不 ...

  4. Qt串口通信接收数据不完整的解决方法(传输图片)

    在使用串口接收数据时,当数据量大的时候会出现数据接收不完整的情况.因为串口数据获取函数readAll()由readyRead()信号触发,但readyRead()信号在串口读到起始标志时立即发送,并不 ...

  5. <QT障碍之路>qt中使用串口类接收数据不完整

    问题:当用QT中的serial->readAll()的时候,不会把全部的数据一次性都读取出来,而是阶段性的.原因是因为当串口有信号时候,readyRead()信号就会被抛出,那么一帧完整的数据帧 ...

  6. C# 解决串口接收数据不完整

    方法1: 使 用缓存机制完成.首先通过定义一个成员变量List<byte> buffer = new List<byte> (4096);用来存放所有的数据,在接收函数里,通过 ...

  7. 31.用python中的serial向串口发送和接收数据(案例一)

    代码功能说明:1.向串口助手发送十六进制数据:0X01,0X03,0X00,0X00,0X00,0X01,0X84,0X0A: 2.用串口助手向代码发送数据,并将发送过来的数据保存在数据库中,按数据和 ...

  8. QT串口助手(三):数据接收

    作者:zzssdd2 E-mail:zzssdd2@foxmail.com 一.前言 开发环境:Qt5.12.10 + MinGW 实现的功能 串口数据的接收 ascii字符形式显示与hex字符形式显 ...

  9. STM32 ucosii 串口接收数据 遇到的问题及解决思路

    写一个程序,用到了ucos ii ,串口在中断中接收数据(一包数据 8个字节 包含: 1byte包头 5byte数据 1byte校验和 1byte 包尾 ) ,数据由上位机每隔500ms发送一次,在串 ...

随机推荐

  1. [转]Splay算法

    首先声明,本教程的对象是完全没有接触过splay的OIer,大牛请右上角. 先看一道题目: skydec有n个数,每次他都会把一些数放进一些盒子里,由于skydec太傻×,所以他不能判断数的大小,现在 ...

  2. Android-Window(一)——初识Window

    Android-Window(一)--初识Window 学习自 <Android开发艺术探索> https://blog.csdn.net/qian520ao/article/detail ...

  3. 【Codeforces666E】Forensic Examination 后缀自动机 + 线段树合并

    E. Forensic Examination time limit per test:6 seconds memory limit per test:768 megabytes input:stan ...

  4. 【BZOJ-3730】震波 动态点分治 + 树状数组

    3730: 震波 Time Limit: 15 Sec  Memory Limit: 256 MBSubmit: 626  Solved: 149[Submit][Status][Discuss] D ...

  5. 2017-2018-2 20172302 『Java程序设计』课程 结对编程练习_四则运算

    1.结对对象 20172308周亚杰 2.本周内容 需求分析 (1).自动生成题目 可独立使用(能实现自己编写测试类单独生成题目的功能) 可生成不同等级题目,类似于: 1级题目:2 + 5 = .10 ...

  6. CentOS 7下宿主机使用virsh console访问KVM的设置

    在CentOS 6下要实现宿主机使用virsh console访问KVM可以说是非常麻烦,但这一问题在CentOS 7已经解决了,只需要两条命令在KVM下即可实现. 1.在KVM(客户机)下开机启动并 ...

  7. Android 9 patch 图片 (.9.png 格式图片) 的特点和制作(转)

    本文围绕 .9.png 格式图片讨论以下两个话题: 1. 该格式图片的特点 2. 制作方式 一 .9.png 格式的文件的特点 与传统的png 格式图片相比, 9.png 格式图片在图片四周有一圈一个 ...

  8. Programming internal SRAM over SWD

    https://github.com/MarkDing/swd_programing_sram // // Copyright (c) 2013 SILICON LABORATORIES, INC. ...

  9. IAR EWAR 内联汇编 Error[Og010], Error [Og005], Error [Og006]

    Error [Og005] + [Og006] when using inline assembler EW targets: 430, ARM, AVR EW component: C/C++ co ...

  10. Android笔记之 网络http通信

    0.在认识HTTP前先认识URL 在我们认识HTTP之前,有必要先弄清楚URL的组成,比如: http://www.******.com/china/index.htm 它的含义例如以下: 1. ht ...