RS485通信-单独通不乱,到系统里就有乱码---从机回复过快乱码

来源:互联网 发布:农村淘宝店开店条件 编辑:程序博客网 时间:2024/06/12 08:46

RS485通信乱码有很多种,硬件和软件各种各样的情况,这里就说一种特别奇怪,但是又特别好玩的乱码。

我们指定RS485是半双工通信,这意味着同一个时间,总线上要么发,要么回,如果同时发和回,电平乱了,数据自然就乱了。在工作用遇到了一个问题,困扰了我2年,在没有示波器的情况下,困扰了我2年,一度以为是硬件设计电路的问题,后来才发现,不是这样的。

由于主机和从机都是我自己来写,在从机模块里,偷懒了,程序框架如此:

if(FLAG_RS485_RX)

{

RS485_SendData(data,len);

      FLAG_RS485_RX=0;

}

这个逻辑有一个问题,FLAG_RS485_RX是接收标志,要知道CPU运算是非常快的,但是串口的速度肯定是毕不了CPU的速度的,这就导致了,串口中断接收是需要一定时间的,假设串口中断全部接收需要10T时间,那么在第一个T时间内FLAG_RS485_RX已经是1了,这个时候立马启动回发数据,自然就与上位机的发送指令打架了,数据也就乱了。