[ZLG-ARM] LPC2148用485通信! 救急!

[复制链接]
4047|14
 楼主| 牛牛特工 发表于 2007-11-24 21:56 | 显示全部楼层 |阅读模式
近日正在做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 />求救!!<br />&nbsp;<br />
 楼主| 牛牛特工 发表于 2007-11-24 21:59 | 显示全部楼层

还有一些实验现象

我还有另一个51的板子&nbsp;这部分的电路都一样&nbsp;代码功能也相同&nbsp;通信是正常的<br /><br />实际信号线也就两根&nbsp;<br /><br />AB之间为120欧姆电阻<br /><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;&nbsp;<br />另外PC发送一帧较多的数据后 2148使用 485会收到很多FF的错误数据 <br />若使用232就没有这样的情况<br /><br />若使用51的板子则485和232均没有问题<br />
gumanzhou 发表于 2007-11-26 19:01 | 显示全部楼层

发送函数应该没有问题

发送函数应该没有问题,你的波特率设对没有??<br />发你的初始化代码看一下<br />
GWY_ARM 发表于 2007-11-26 19:28 | 显示全部楼层

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

&nbsp;&nbsp;可能是方向控制线过早恢复的问题,发送前面的字节能正确,是因为受发送后面字节的方向控制“照顾”了。<br />&nbsp;&nbsp;你试试看把整帧数据发完后延时一段时间再恢复方向线电平,比如说,把发送代码改成这样子:<br /><br />for(i=0;i&ltn;++i)<br />{<br />&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 />IO0SET=CTRL_485;<br />delay_ms(5);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;让方向线保持一段时间<br />IO0CLR=CTRL_485;<br />
月亮 发表于 2007-11-27 11:46 | 显示全部楼层

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

<br />我用电脑串口经485转换与LPC21XX通讯(modbus协议)没有问题:<br />LPC21XX接MAX485芯片.<br /><br />发送程序...<br />/开始发送<br />void&nbsp;beginSend(void)&nbsp;{&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;i&nbsp;=&nbsp;0;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;TX_485;<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(sendCount&nbsp;&gt&nbsp;0)&nbsp;<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UART0_SendByte&nbsp;(sendBuf);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendCount&nbsp;--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;RX_485;<br />}&nbsp;
blueskyjwf 发表于 2007-11-27 20:12 | 显示全部楼层

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

3485芯片的方向切换是需要时间的,另外ARM处理器速度较快,两个速度上没有处理好。
 楼主| 牛牛特工 发表于 2007-11-28 18:55 | 显示全部楼层

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

&nbsp;GWY_ARM&nbsp;发表于&nbsp;2007-11-26&nbsp;19:28&nbsp;ZLG-ARM&nbsp;←返回版面&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />4楼:&nbsp;可能是方向控制线过早恢复的问题。&nbsp;<br /><br />用这样的代码试过了&nbsp;大部分通信都正确了<br />但PC仍然会时不时的收到若干个错误数据~~~<br /><br />目前暂时用PC的软件过滤掉那些错数据<br /><br /><br />且现在在不同的电脑上表现不一样&nbsp;有的电脑用232转485是好的<br />有些则总收到错误数据&nbsp;&nbsp;232通信都没有问题&nbsp;<br /><br />月亮:<br />TX_485&nbsp;RX_485是宏定义的语句?<br />里面是IOCLR和IOSET吗?
月亮 发表于 2007-11-30 16:07 | 显示全部楼层

485

#define&nbsp;DE_485&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1&nbsp;&lt&lt&nbsp;23)<br />#define&nbsp;TX_485&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IOSET&nbsp;=&nbsp;DE_485<br />#define&nbsp;RX_485&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IOCLR&nbsp;=&nbsp;DE_485<br />
极限思考 发表于 2007-11-30 18:24 | 显示全部楼层

两个实验下

1:485芯片A加上拉,B加下拉,20K。去掉120R电阻。<br />2:换个转换头,最好是有源的实验下。<br />
2_1_I_C 发表于 2007-12-1 16:59 | 显示全部楼层

帮你顶

  
汽车电子 发表于 2007-12-2 12:47 | 显示全部楼层

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

&nbsp;&nbsp;&nbsp;RS232、RS485、CAN我都在用,没问题的
 楼主| 牛牛特工 发表于 2007-12-3 10:34 | 显示全部楼层

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

单板通信完全正常,<br />2148+3485&nbsp;<br />但接了另外一个模块(和485通信完全没有关系&nbsp;5v信号10M左右)<br />则单片机会收到许多垃圾数据<br />惊奇的是&nbsp;我把数字地接在了交流地上<br />竟然这个现象就好了按道理交流地和直流地是不能接在一起的~<br />前一个PCB至今尚未调好~~<br />
 楼主| 牛牛特工 发表于 2007-12-3 10:42 | 显示全部楼层

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

谢谢~
 楼主| 牛牛特工 发表于 2007-12-3 14:20 | 显示全部楼层

汗颜!!!!

今天又做了几个实验<br />将GND接在地线上&nbsp;即220V的大地之上<br />485通信就完全正常了~~<br />不论新PCB板还是老PCB板皆是如此<br />不知道有没有高手知道这是为什么?
netcalf 发表于 2008-6-20 16:01 | 显示全部楼层

期待结论

期待结论。我碰到的问题跟特工一样一样的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

618

帖子

2

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