- 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再拉低读写控制位也不行,而且加这个延时多少好象也没有起到很大作用,各位大神,帮帮忙吧?我真的没有办法了。