QT5c串口接收数据不完整整,怎么解决

buffer中的数据进行检验如果达到一萣的长度并且校验结果正确(校验方法在发送方和接收方一致),再进行处理具体代码如下:

 
  1. while (buffer.Count >= 4) //至少包含帧头(2字节)、长度(1字节)、校验位(1字节);根据设计不同而不同

  2. //得到完整的数据,复制到ReceiveBytes中进行校验

  3. /////执行其他代码对数据进行处理。

  4. else //帧头不正确时记得清除

在使用串口接收数据时当数据量大的时候会出现数据接收不完整的情况。

因为串口数据获取函数readAll()由readyRead()信号触发但readyRead()信号在串口读到起始标志时立即发送,并不保证一定是當前所发数据的起始部分

因此串口通信双方在通信前应制定好通信协议,规定好数据的起始和结束标志串口当读到完整的起始和结束標志之后,才认定读完一条完整的数据

本例中用串口定时发送当前时间,用"#"表示数据的结尾定时时间为0毫秒,即能发多快就发多快

 
 

(1) (貌似贴出的代码可以存下串口接受的全部数据)

因为串口本来就不是一次接收完数据接受数据时需要判断!

(5) (B站视频教程)

尤其是下面这篇文章,建议精读!

(灿哥哥的博文208万+的访问量)

在此先要感谢CSDN上认识的湖南大学计算机院的大佬!

分析:单片机在发送完每条完整的数据后,都会发送┅个 "\r\n"那么"\n"可以看作结束标志

思路:将"\n"作为结束标志,以判断是否接收到一个完整的数据

由上述思路——>具体实现代码:

将上面的代码融合到的程序中,得到了全新一代的串口上位机

我要回帖

更多关于 c串口接收数据不完整 的文章

 

随机推荐