打印
[ZLG-ARM]

LPC2148用485通信! 救急!

[复制链接]
3252|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
牛牛特工|  楼主 | 2007-11-24 21:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
近日正在做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 21:59 | 只看该作者

还有一些实验现象

我还有另一个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有问题  
另外PC发送一帧较多的数据后 2148使用 485会收到很多FF的错误数据 
若使用232就没有这样的情况

若使用51的板子则485和232均没有问题

使用特权

评论回复
板凳
gumanzhou| | 2007-11-26 19:01 | 只看该作者

发送函数应该没有问题

发送函数应该没有问题,你的波特率设对没有??
发你的初始化代码看一下

使用特权

评论回复
地板
GWY_ARM| | 2007-11-26 19:28 | 只看该作者

可能是方向控制线过早恢复的问题。

  可能是方向控制线过早恢复的问题,发送前面的字节能正确,是因为受发送后面字节的方向控制“照顾”了。
  你试试看把整帧数据发完后延时一段时间再恢复方向线电平,比如说,把发送代码改成这样子:

for(i=0;i<n;++i)
{
    IO0SET=CTRL_485;
    U0THR=*outbuf;
    outbuf++;
    while((U0LSR&0x20)==0);        // 等待数据发送
    IO0CLR=CTRL_485;
}
IO0SET=CTRL_485;
delay_ms(5);                      // 让方向线保持一段时间
IO0CLR=CTRL_485;

使用特权

评论回复
5
月亮| | 2007-11-27 11:46 | 只看该作者

我用电脑串口经485转换与LPC21XX通讯(modbus协议)


我用电脑串口经485转换与LPC21XX通讯(modbus协议)没有问题:
LPC21XX接MAX485芯片.

发送程序...
/开始发送
void beginSend(void) {   
    uint8 i = 0; 
    TX_485;
    while (sendCount > 0) 
   {
        UART0_SendByte (sendBuf);
        sendCount --;
        i++;
    }
    RX_485;

使用特权

评论回复
6
blueskyjwf| | 2007-11-27 20:12 | 只看该作者

应该是485方向切换延时不够造成的

3485芯片的方向切换是需要时间的,另外ARM处理器速度较快,两个速度上没有处理好。

使用特权

评论回复
7
牛牛特工|  楼主 | 2007-11-28 18:55 | 只看该作者

感谢各位的解答 不过目前该问题还没有完全解决!

 GWY_ARM 发表于 2007-11-26 19:28 ZLG-ARM ←返回版面    

4楼: 可能是方向控制线过早恢复的问题。 

用这样的代码试过了 大部分通信都正确了
但PC仍然会时不时的收到若干个错误数据~~~

目前暂时用PC的软件过滤掉那些错数据


且现在在不同的电脑上表现不一样 有的电脑用232转485是好的
有些则总收到错误数据  232通信都没有问题 

月亮:
TX_485 RX_485是宏定义的语句?
里面是IOCLR和IOSET吗?

使用特权

评论回复
8
月亮| | 2007-11-30 16:07 | 只看该作者

485

#define DE_485       (1 << 23)
#define TX_485       IOSET = DE_485
#define RX_485       IOCLR = DE_485

使用特权

评论回复
9
极限思考| | 2007-11-30 18:24 | 只看该作者

两个实验下

1:485芯片A加上拉,B加下拉,20K。去掉120R电阻。
2:换个转换头,最好是有源的实验下。

使用特权

评论回复
10
2_1_I_C| | 2007-12-1 16:59 | 只看该作者

帮你顶

使用特权

评论回复
11
汽车电子| | 2007-12-2 12:47 | 只看该作者

不用可能,肯定是方向控制有问题

   RS232、RS485、CAN我都在用,没问题的

使用特权

评论回复
12
牛牛特工|  楼主 | 2007-12-3 10:34 | 只看该作者

现在重画了一块PCB效果又不同了

单板通信完全正常,
2148+3485 
但接了另外一个模块(和485通信完全没有关系 5v信号10M左右)
则单片机会收到许多垃圾数据
惊奇的是 我把数字地接在了交流地上
竟然这个现象就好了按道理交流地和直流地是不能接在一起的~
前一个PCB至今尚未调好~~

使用特权

评论回复
13
牛牛特工|  楼主 | 2007-12-3 10:42 | 只看该作者

准备按照极限思考的方案看看

谢谢~

使用特权

评论回复
14
牛牛特工|  楼主 | 2007-12-3 14:20 | 只看该作者

汗颜!!!!

今天又做了几个实验
将GND接在地线上 即220V的大地之上
485通信就完全正常了~~
不论新PCB板还是老PCB板皆是如此
不知道有没有高手知道这是为什么?

使用特权

评论回复
15
netcalf| | 2008-6-20 16:01 | 只看该作者

期待结论

期待结论。我碰到的问题跟特工一样一样的。

使用特权

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

本版积分规则

52

主题

618

帖子

2

粉丝