串口通讯中数据收发有误

串口通信遇到一个很奇怪的问题,刚开始的时候接受不到数据,然后突然可以接受到但数据有误,用的是两根TTL转USB的线,串口号波特率什么的也是对得上的。
这是代码,实现了简单的接受数据。

img


在接受数据的时候会突然多出一行

img


返回结果也不对

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/339580
  • 除此之外, 这篇博客: USB转网口转485转232转TTL等多接口互转调试工具,无需拨动开关自动切换连接中的 设计难点: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    (1)如何实现网口、USB、485、232、TTL等5种模式 十种通讯方式互相转换
    根据平时在网上收集资料发现,网上也有类似的调试工具,均是见上述几种通讯模式转为TTL,然后再相互转化。缺点,使用过程中需要接跳线或者切换模式的开关。
    (2)如何实现485自动收发
    因为485是属于半双工的串行总线,在收发的过程中需要控制485芯片控制脚位来实现收发,但是我们设计的调试工具为了简单方便使用,就未使用单片机等控制芯片。所以我们需要实现RS485转TTL自动收发功能。先上原理图在这里插入图片描述
    实现原理介绍
    接收的时候分析,RXD_485为高电平,三极管Q1导通,DE和RE为低电平。此时485处于接收模式。A,B为高阻,信号由另一端来控制,RO可以正常输出接收到的数据。
    发送时的分析:,RXD_485为低电平,三极管Q1不导通,DE和RE为高电平。此时485处于发送模式。DI接GND,即DI=0,485将数据0发送出去。当RXD_485发送数据1的时候,485为接收模式,A,B为高阻态,但是外面有R9上拉(A=1),R6下拉(B=0),对于远端来说,会接收到A=1,B=0,即接收到差分数据1。
    (3)网口转TTL
    在这里插入图片描述采用网口直接转TTL芯片

    (4)USB转TTL
    在这里插入图片描述
    采用USB直接转TTL芯片

    (5)232转TTL
    在这里插入图片描述
    (6)如何实现无续切换开关、自动切换
    详见:

    详解.

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^