485通信问题 急救!!!

[复制链接]
6774|9
 楼主| 牛牛特工 发表于 2007-11-24 15:58 | 显示全部楼层 |阅读模式
近日正在做485的通信&nbsp;<br />2148&nbsp;UART1接3485&nbsp;<br />上位机用232-485转换器<br />两机使用双绞线连接:<br />问题:<br />PC在一次传输结束时&nbsp;,总是收到一些不正确的数据<br />如PC&nbsp;发送&nbsp;START&nbsp;的ASC码<br />本来2148回复的是READY&nbsp;的ASC码&nbsp;前面的数据接收都是正确的<br />但其最后一个BYTE变成了0xFF<br /><br />485通信流程:&nbsp;2148的485默认为接收状态&nbsp;3485的RE&nbsp;DE端控制为低电平<br />当2148发送数据时,将3485的RE&nbsp;DE端变为高电平&nbsp;发送完毕后REDE端恢复电平&nbsp;<br /><br />另外:<br />有时我将连续向2148发送较多的数据<br />此时PC会收到一些乱七八糟的数据&nbsp;多数为FF<br /><br /><br />PS:&nbsp;当我使用一样的硬件环境,UART0接3232与PC的串口连接<br />则通信没有任何问题<br /><br />求救!!
阿南 发表于 2007-11-24 16:51 | 显示全部楼层

用示波器测一下232-485转换器的输出,看看有无异常

或是当2148发送完数据后,需要及时的结束485的接收状态,都可以用示波器测出波形来分析
 楼主| 牛牛特工 发表于 2007-11-24 17:28 | 显示全部楼层

转换器应该是没有问题

我还有另一个51的板子&nbsp;这部分的电路都一样&nbsp;代码功能也相同&nbsp;通信是正常的<br /><br />实际信号线也就两根&nbsp;<br /><br />AB之间为120欧姆电阻<br /><br />楼上是说发送完毕时结束发送状态吗?&nbsp;<br /><br />貌似现在已经是这样做的&nbsp;但好象没什么效果~<br />这是我发送的函数&nbsp;485CTRL是DE&nbsp;和RE所连接的IO脚<br />for(i=0;i&ltn;++i)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0SET=CTRL_485;<br />&nbsp;&nbsp;&nbsp;&nbsp;U0THR=*outbuf;<br />&nbsp;&nbsp;&nbsp;&nbsp;outbuf++;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((U0LSR&0x20)==0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;等待数据发送<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR=CTRL_485;<br />}<br />每次发送最后一个BYTE有问题&nbsp;
阿南 发表于 2007-11-26 20:41 | 显示全部楼层

是指最后一个数据没有正常被接收吗?还是最后一个也正常

但还多出一个0xff?发送完最后一个数据后,延时一段时间,再执行IO0CLR=CTRL_485;<br /><br />不是指转换器有问题,而是和主机的通讯没有协调好,用示波器也就是查看这个.
wenming 发表于 2007-11-27 08:27 | 显示全部楼层

应该需要延时

调试485的时候遇到过这个问题.
chunyang 发表于 2007-11-27 23:02 | 显示全部楼层

去通讯技术坛看老帖

关于485的很多
xzl 发表于 2007-11-28 22:05 | 显示全部楼层

485通讯的根本是MCU与计算机通讯的问题

由于485通讯的距离一般都比较远,因此不出错是不可能的,需要在协议中加入校验。我原来用过CRC校验,感觉不错。<br />从你出现的现象来看,感觉不是485的问题,也许是MCU发送的每个字节间隔时间太短,建议在字节间加入延时。<br />还有,我用过SPX的3485,性能很差,速率高了就出问题
winloop 发表于 2007-11-29 15:37 | 显示全部楼层

很明显的问题

你买的232转485模块是假的,往回漏数据,这是假232转485模块的典型特征!
拖延猪 发表于 2014-6-23 15:20 | 显示全部楼层
我也遇到这个问题了,大神解决了吗?我已经把波特率降到1200了,还是这个现象。
最后一个字节变成0xff,如果只发送一个字节就直接变成0xff了。
xixihahash 发表于 2014-6-23 17:20 | 显示全部楼层
楼主,最后一个字节的问题话,你看看是不是这样:

你在UART发送完成中断上来后马上关闭了485的发送使能?
如果是呢,那么请看看你用的发送完成中断标志位是发送到缓冲区的中断还是发送完成的中断,
建议使用发送完成的中断~~~
不过这样也有可能出现数据在485总线上被你提早关闭了485的发送使能所错乱,
要么可以多发一个无用字节
要么就手动控制一下延时。^_^
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

618

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部