月度归档:2017年03月

485通讯调试总结

485通讯是常见的应用,实现通讯很简单,但是要保证通讯的稳定,有一些细节需要注意。

485通讯一般采用一主多从的方式,主机轮询多个从机。从机接收到主机的数据后,根据地址判断是否要接收数据,地址匹配,从机接收数据,处理完后发送应答数据给主机。地址不匹配,从机丢掉数据。

通讯协议推荐采用ASCII码,协议格式如下:

 

image

采用ASCII码的好处是单片机的串口接收程序容易判断整帧数据的头码和尾码。如果采用16进制的方式,发送的数据内容可能包括头码和尾码的字符,导致接收出错。ASCII码方式则避免了这种问题。

不管是主机还是从机,485芯片只是在发送数据时处于发送模式,发送完数据后就要切换为接收模式。从接收模式切换到发送模式时,至少需延时1ms等待485芯片状态稳定再发送数据。发送完数据后也至少需要延时1ms等待数据完全发送后再切换到接收模式。

485是半双工通讯方式,也就是说同一时刻只能发送或接收。从机收到主机的轮询数据后,建议从机关闭串口接收中断,发送完数据再打开串口接收中断。从机会接收到两种数据,一个是主机的轮询数据,一个是其它从机返回给主机的数据,从机的串口中断接收程序应注意区分。

当主机发送轮询命令给一个从机后,等待一段时间,再发送轮询命令给另一个从机,这时第一个从机返回数据给主机,这个时候就会发生数据碰撞,导致主机接收的数据错误,从机接收的数据也错误。这种情况在半双工通讯的情况下很难避免。只能调整主机发送轮询命令的间隔时间来减少这种情况的发生。