当前位置: 代码迷 >> 综合 >> 【Qt串口调试助手】1.2 - 串口数据接收不发生换行,CH340 / CP2102 多硬件兼容
  详细解决方案

【Qt串口调试助手】1.2 - 串口数据接收不发生换行,CH340 / CP2102 多硬件兼容

热度:5   发布时间:2024-02-27 22:19:55.0

 

上一篇提到:对串口接收的显示,使用的是当前位置插入+移动鼠标光标到末尾的方式。这种方法可以有效解决 串口数据接收发生换行的问题,并且解决 CH340 / CP2102 多硬件显示结果不一致的问题。那有没有别的方式?各有什么优劣?

 

GitHub源码下载:Qt串口调试助手下载

 

串口数据接收不发生换行,的几种解决方法:

  • 第1种:appendPlainText,末尾追加显示。会带来接收换行问题,并且 CH340 / CP2102 多硬件显示结果不一致。
  • 第3、4种都是将文本框内容全部读取再追加内容,最后再放回文本框,导致运行效率很低。而网上很多开源代码是使用的这种处理方式。这正是使我想要搭建自己开发框架的原因,追求可靠、高效。
  • 我在代码中,使用的是第2种处理方式。解决插入换行问题,并兼容 CH340、CP2102等不同设备。

 

 

1. appendPlainText 末尾追加,会发生换行

使用 appendPlainText 末尾追加,会使接收区发生换行,导致与发送区的数据不完全一致。

并且对于不同硬件的端口,如 CH340、CP2102,显示结果有很大差别。

 

  • 同样发送一段数据,观察 CH340、CP2102使用 appendPlainText 末尾追加 的显示效果:

电脑 COM8 的串口硬件为 CH340,COM9 的硬件为 CP2102,将 TX、RX短接,自发自收。

 

CP2102 的接收区现象:(会产生不正常换行)

 

CH340 的接收区现象:(无不正常换行)怀疑 CP2102 的USB上报率要高于 CH340。

 

继续将单次发送的字节数增大,CH340也同样会发生换行。所以排除硬件兼容问题,原因更像是电脑串口数据流的自身处理机制导致。故想要依靠更换端口硬件的方法,实现接收显示不换行并不现实,需要其他的显示处理方法。

 

2. insertPlainText 当前位置插入 + 移动光标到末尾,不发生换行

 

 

这种方式是我觉得最好的,解决了不正常换行问题,显示效率又比较高。

 

 

3. 获取显示区所有内容再末尾插入,不发生换行

这种方式,虽然也能解决插入换行问题,但随着接收显示区的缓存变大,处理效率一定会逐渐降低。不建议使用这种方法。