RS485是半双工,只能发或者只能收,不能同时收发,其发和收需要通过控制引脚进行切换。这也导致了它在需要频繁切换收发时可能会出现一些问题。
1、发送数据时,先把数据放在数据寄存器,然后在由数据寄存器转到移位寄存器进行发送。RS485一般默认收,也就说一般发送后会把控制引脚置为收,有可能会出现部分数据还未从移位寄存器移出时就把引脚置为收,这会导致部分数据发送不出去。
解决方法:可以在收发功能的切换前加上while等待发送完,通过标志位TC判断,即通过标志位判断数据是否发送完成,若发送未完成则卡在while循环里,直到发送完成,退出while循环,再把引脚置为收。while(发送未完成) ;设置为接收模式;。当然也可以用延时函数,但用标志位判断会更准确些。
2、如果使用波特率115200进行发送数据的话,可能会出现前面的数据乱码的情况。原因可能是控制信号到达RS485芯片收发切换引脚需要一定时间,即切换到发送模式有一小段延时,可以通过示波器抓取信号判断。