如下图,这是一个RS485芯片与单片机连接的典型电路,通常我们用一个IO口来控制485的发送与接收选择引脚。
那么隐患在哪里呢?在单片机的接收引脚RXD上。当单片机发送数据时方向控制引脚DIR变高,使485芯片处于发送状态,再看看485芯片的内部原理图:
当DE和RE两个引脚拉高时,R三态门是处于关闭状态,其输出RO也是处于不稳定的电平状态,输出高还是输出低那要看运气了,如果是高,那你的程序可能没有任何问题,但如果是低那你的程序会出现莫名其妙的问题,原因是单片机的UART是全双工的,发送的同时也处于接收状态,在RXD引脚上一旦出现低电平那就触发一个接收逻辑,你会发现单片机一发送,目标还没有响应你的程序会收到一个无用的数据,当然如果在编写程序时意识到这个问题,当然可以通过程序的方法来解决此事,但还是不如从源头上解决此事来的爽快。
解决办法1:RXD引脚接一个上拉电阻
解决办法2:在程序中打开RXD引脚上的内部上拉电阻
|
|