打印

485通信问题 急救!!!

[复制链接]
5600|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
牛牛特工|  楼主 | 2007-11-24 15:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
近日正在做485的通信 
2148 UART1接3485 
上位机用232-485转换器
两机使用双绞线连接:
问题:
PC在一次传输结束时 ,总是收到一些不正确的数据
如PC 发送 START 的ASC码
本来2148回复的是READY 的ASC码 前面的数据接收都是正确的
但其最后一个BYTE变成了0xFF

485通信流程: 2148的485默认为接收状态 3485的RE DE端控制为低电平
当2148发送数据时,将3485的RE DE端变为高电平 发送完毕后REDE端恢复电平 

另外:
有时我将连续向2148发送较多的数据
此时PC会收到一些乱七八糟的数据 多数为FF


PS: 当我使用一样的硬件环境,UART0接3232与PC的串口连接
则通信没有任何问题

求救!!

相关帖子

沙发
阿南| | 2007-11-24 16:51 | 只看该作者

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

或是当2148发送完数据后,需要及时的结束485的接收状态,都可以用示波器测出波形来分析

使用特权

评论回复
板凳
牛牛特工|  楼主 | 2007-11-24 17:28 | 只看该作者

转换器应该是没有问题

我还有另一个51的板子 这部分的电路都一样 代码功能也相同 通信是正常的

实际信号线也就两根 

AB之间为120欧姆电阻

楼上是说发送完毕时结束发送状态吗? 

貌似现在已经是这样做的 但好象没什么效果~
这是我发送的函数 485CTRL是DE 和RE所连接的IO脚
for(i=0;i<n;++i)
{
         IO0SET=CTRL_485;
    U0THR=*outbuf;
    outbuf++;
    while((U0LSR&0x20)==0);        // 等待数据发送
    IO0CLR=CTRL_485;
}
每次发送最后一个BYTE有问题 

使用特权

评论回复
地板
阿南| | 2007-11-26 20:41 | 只看该作者

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

但还多出一个0xff?发送完最后一个数据后,延时一段时间,再执行IO0CLR=CTRL_485;

不是指转换器有问题,而是和主机的通讯没有协调好,用示波器也就是查看这个.

使用特权

评论回复
5
wenming| | 2007-11-27 08:27 | 只看该作者

应该需要延时

调试485的时候遇到过这个问题.

使用特权

评论回复
6
chunyang| | 2007-11-27 23:02 | 只看该作者

去通讯技术坛看老帖

关于485的很多

使用特权

评论回复
7
xzl| | 2007-11-28 22:05 | 只看该作者

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

由于485通讯的距离一般都比较远,因此不出错是不可能的,需要在协议中加入校验。我原来用过CRC校验,感觉不错。
从你出现的现象来看,感觉不是485的问题,也许是MCU发送的每个字节间隔时间太短,建议在字节间加入延时。
还有,我用过SPX的3485,性能很差,速率高了就出问题

使用特权

评论回复
8
winloop| | 2007-11-29 15:37 | 只看该作者

很明显的问题

你买的232转485模块是假的,往回漏数据,这是假232转485模块的典型特征!

使用特权

评论回复
9
拖延猪| | 2014-6-23 15:20 | 只看该作者
我也遇到这个问题了,大神解决了吗?我已经把波特率降到1200了,还是这个现象。
最后一个字节变成0xff,如果只发送一个字节就直接变成0xff了。

使用特权

评论回复
10
xixihahash| | 2014-6-23 17:20 | 只看该作者
楼主,最后一个字节的问题话,你看看是不是这样:

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

618

帖子

2

粉丝