发送和接收_485 发送的同时如何接收数据

485是通过两根差分线来传输数据,所以总线上要么是发送的数据,要么是接收的数据,所以标准两线485是属于半双工的工作模式。既然是半双工,发送的同时又接收数据,这个问题岂不是很奇怪,并且这样的实现又有什么意义。

先看下到底是基于什么场景我才想到去验证这么一个问题。标准485总线上可以同时挂载多个设备,但是只能有一个为主机,其他的都为从机。

e9b09e096b493d82ce9d897459ff287b.png

这样主机不主动发送数据,总线上一直都处于空闲状态。 而从机要发数据一定是主机先对从机进行询问,然后从机进行应答。

1d88b87dcbfa68bcdffac4a8c3ea9d1d.png

这样的总线上就能保证永远也不会有数据冲突(也就是同时有多个设备发出来数据)。而我想要的效果就是不要标准的主从模式,而是想要多个主机同时存在。多个主机存在就有可能多个设备同时发数据,造成数据冲突。

而这个发送的同时又接收总线上的数据就是为了验证总线上数据是否冲突了,比如一个设备在发送0xFF,另一个设备同时发送了0X12。这样总线上的数据是不是就混乱了。

所以基于为了避免冲突,任何一个设备在发送之前都进行检查,比如在总线上发送0x55,同时这个设备也打开接收,如果总线上没有冲突就会收到0x55,如果冲突了接收到的数据和发送的数据就会不同。这个接收就是为了接收自己发送出去的数据进行验证。

因为手头上没有现成的485 板子,就直接拿芯片焊线插上面包板,再连接stm32的uart口,搭建出来验证的环境:

45ac9b7e51ea3bf4208b3143ea9d6694.png

芯片使用的max1483。接线示意图如下:

ac4019955c4b86063b4ea10becb0cb51.png

实现的重点就是RE DE两个控制脚。根据手册里面的描述,RE-低的时候使能RO输出(也就是AB总线上数据可以直接从RO输出)。DE为高的时候使能AB输出,这时候DI上的数据就会被转为AB差分输出。

通过DERE 同时拉高或者拉低就可以切换max1483处于发送还是接收状态。那么也可以把RE设置为低,DE设置为高来实现同时打开发送和接收。这样如果485总线空闲的时候就可以保证MCU RX接收到的还是MCU TX发送的数据。

a8eab3bf86f035f51b00997d109e3a61.png

最后我也做了测试当MCU TX在发送数据,我又同时通过usb转485往AB总线上发其他数据,这时候MCU RX接收的就是乱码了。和最初设想的结果相同,so,485多主机存在就实现了第一步。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值