0
问答首页 最新问题 热门问题 等待回答标签广场
我要提问

RS-485

RS485奇怪的问题

好久没用485了,这次想用下,结果出现莫名其妙的问题:首先设定485为读状态,这时如果用数据过来可以接收得到,如果把485设为写状态,也可以写出去,说明485芯片及控制状态部分是对的,但想平时让485处于接收状态,只有写数据时才改变状态,按理说应该是这个样子的,但现象是接收到数据后,在转为发送状态时数据发不出去,控制端也变为了高电平,只能是要么一直可以接收,要么一直可以发送,呆了一样,捣估了二天还是没找到原因,请大家帮分析一下,是芯片状态不能快反应还是其他什么问题,我为了状态变化都加了一个延时了。

提问者:Noyeet 地点:- 浏览次数:7380 提问时间:10-15 17:04
我有更好的答案
提 交
12条回答
ywujwerwx 07-20 10:13
原因有很多,还是上电路图...
金利恒电子谭小姐 07-19 00:58
485芯片的2、3脚连在一起控制的,用单片机控制的,就是这个控制端要么一直低可以接收数据,要么一直高发送数据,就是不能那种脉冲式工作,平时低,发送时才变成高。
zongyueli 07-21 23:47
485片子的RE/DE要控制好,否则就会出这种问题,有时序要求的。
www033 07-21 14:00


485的收发控制切换后,要有一定的延时,然后再发送或者接收数据。
曾经用DSP调试过MAX1480A(带隔离的485,单工),开启接收或者是发送后,延时时间需要40us,然后接收或者发送数据。在由发送切换为接收时,延时需要200us,不然不能正确接收数据。
60user142 07-15 23:40
说明楼主的电路或软件存在问题,检查数据发送期间方向控制电平是否稳定,同时给出接口电路图。
ujuwefwf 07-20 13:36
感觉LZ的道理也很清楚,应当是现场问题,别人帮不上。

换个芯片试试。
vuwyewss 07-21 05:17


建议:
1、检查硬件电路,比如A-B间的匹配电阻;
2、程序打断点,用示波器关注485芯片的使能脚电平变化是否跟你预想的一样;
3、用串口助手监控485总线上的收发数据是否正确。
根据LZ的描述,应该是收发控制的时序问题,遇到问题多静心思考。

脑洞大赛11 07-22 08:41
上图会才好分析
Green_LJ 07-18 17:57
RW = 1;
Delay_us(40);
HalUARTWrite( SERIALPORT, Data[5],6);
Delay_us(200);
RW = 0;
就是发不出去,如果让RW一直等于1,就可以发送出去,数据也是对的。或者如果RW一直等于0,则也可以接收,数据也是对的,为什么哪?硬件应该没问题吧,时序也对,还有什么情况产生这种现象哪?
小马哥996 07-22 21:37
可能你HalUARTWrite( SERIALPORT, Data[5],6);这个子程序中没有等到所有数据发送完成就退出了
要特别注意最后一个字节是否发送,

通常数据写入到发送缓冲,只代表启动一个字节的发送,不代表发送完成的!
对WR=0的操作一定要等到发送完成才可以!

比如51芯片,产生发送中断时,只表示SBUF的数据已被取走,但数据还没有被发送哦,此时
如果将WR改为0,将会导致最后一个字节出错
nvywerwrq 07-18 23:22
做了几个试验,因为没有示波器所以头痛,只能通过程序试验,有趣的是我设为连续发送比如3个后将WR设为0,这时只能发送成功2组,最后一个数据发不出去,如果设连续发送4组数据,前面三个成功,最后一个也不成功,调用发送程序后我加了大概200mS的延时才让RW=0,也不行。各位什么情况?我的发送子程序也看了没什么问题,如果有问题,前面的2组也不会成功。
iwqudwnd 07-21 08:46
只要是发送后将RW=0,它前面的那组就发送不出去,我查了单片机内部的检测位,如传送字节状态:
0 字节没有被传送
1 写到数据缓存寄存器的最后字节被传送
这里我是等这个位等于1后又延时了50ms再拉低读写控制位也不行,而且加这个延时多少好象也没有起到很大作用,各位大神,帮帮忙吧?我真的没有办法了。
撰写答案
提 交
1 / 3
1 / 3
相关RS-485
关于RS485隔离防雷的信号地和大地的处理的疑问
关于RS485上拉电阻和下拉电阻阻值的问题
四种RS485防雷保护接地电路
3.3V供电的RS485接口远距离数据通信电路设计
采用C8051F020的RS485串行通信电路设计