发新帖我要提问
12
返回列表
打印

做多485串口的东东,对485方向控制头痛,有好招么?

[复制链接]
楼主: Wxy8030
手机看帖
扫描二维码
随时随地手机跟帖
21
jerkoh| | 2009-9-9 21:20 | 只看该作者 回帖奖励 |倒序浏览
顶 学习下

使用特权

评论回复
22
Wxy8030|  楼主 | 2009-9-9 22:17 | 只看该作者
TO:冷漠—— 感谢兄弟进来讨论此问题,不过对兄弟的方法不是很明白,主要有几点:
1、如果用数据环回的方式,这就需要额外判断这些字节是应该接受的,还是自己发出的,485方式下好说,但系统中还有232方式.......
2、RTS跟芯片FIFO相关,可实际上需要发送的一帧数据可能远远超过16字节,这种情况怎么办?
3、还没研究16C550的/RXRDY、TxRDY,但16C554的/RXRDY、/TxRDY是共用的,恐怕无法解决每个串口的问题;
4、485方式下要让数据环回不需要那么麻烦,485芯片的接受端始终有效就可以了;
5、16C550系列的片子本身似乎没考虑半双工的方式,包括PIC系列的单片机、LPC213X系列的ARM,都没有对此问题有一个很好的解决办法,这让我实在不太理解......

使用特权

评论回复
23
冷漠| | 2009-9-10 11:49 | 只看该作者
别把简单的问题复杂化了。
1、“485方式好说,但系统还有232方式。”???你总不会在同一时间、同一UART端口上同时485/232半双工/全双工混和应用吧?
   所以,我说的是如何利用单片机UART部件实现RS485半双工网络通信的问题。是教材书上没有的内容。你如果谈RS232怎么办,所有单片机书上都有。一个一个字节发送,一帧愿意多少字节封装随自己的便。
2、如果一帧大于16字节,很简单。你关闭 /RTS 自动流控方式,程序控制 /RTS 端脚输出就行了。这时的操作和RS232方式一样啊。关键是使用了CAN接口驱动器,能够在发送的同时,检测到最后一个字节发送结束的时刻。解决了LZ的主题,避开了利用发送保持寄存器空中断信号提前,不能切换RS485芯片方向的问题。
3、有道理。
4、搞不懂了。rs485接口芯片是半双工驱动,“接收端始终有效。”数据还能发送到总线上么?
5、本来利用单片机实现RS485主从网络是很简单的应用,实际范例多得是。主要你一开始的思路就错了:不是利用发送缓冲器空中断信号去切换总线方向,而是利用接收器 /RTS 信号进行控制。即使那种真正的成帧(256字节一帧)发送的SDLC通信适配器(rs485总线网络),也是典型地使用 /RTS 信号脚控制方向切换的。看一看80C152内部SIU就知道了。

使用特权

评论回复
24
Wxy8030|  楼主 | 2009-9-10 12:39 | 只看该作者
TO 冷漠——
的确是同一时间、同一UART上即有232又有485,说白了就是我的串口同时支持232和485......而且我这个设备只是一个数据转发器,是全双工或半双工,是由实际连接的设备决定的......如果只是485,确实可以通过检测自己发出的数据是否已经全部收到来确认是否发送完毕!

其他问题目前看来皆与此问题有关.......

使用特权

评论回复
25
冷漠| | 2009-9-10 13:43 | 只看该作者
本帖最后由 冷漠 于 2009-9-10 13:52 编辑

呵呵。突然明白一件事:你连硬件还没弄清楚、没设计好呢。就编什么软件?
请把硬件图贴上来,否则大大的疑问:
1、同一UART在同一时间内既管理一个RS485网络,又同时管理一个RS232通信对象?!

你应该按照下面这样说,别人还能明白你的设计目标:
   “ 我要设计的是一个HUB,它至少有2个端口,一个端口是RS485半双工通信总线,另一个端口是RS232全双工通信线路。两者(或多端口)之间要求能够互相转发数据。因此这至少需要2个UART,所以我外加了一个16C554四UART串口扩展芯片。”

2、一个UART管理一个端口,要么是RS485,要么是RS232。硬件在设计时已经定制好了,一个HUB能接几个rs485或者RS232,是硬件、软件设计时就定制了的。没有哪个独立单端口既能接RS485,又能接RS232的。更不可能2者同时接。可是你说的是你要用16C554上的“同一”UART同时管理2个端口RS485和RS232之间的通信。

真敢创新! 敬佩。祝你成功。

使用特权

评论回复
26
Wxy8030|  楼主 | 2009-9-10 20:48 | 只看该作者
串口同时支持232、485很常见的呀,不过实际使用的时候只会接其中一个而已.......

使用特权

评论回复
27
冷漠| | 2009-9-10 21:18 | 只看该作者
本帖最后由 冷漠 于 2009-9-10 21:37 编辑

1、“串口同时支持232、485很常见的呀,”没错,那需要硬件上电路变换吧?或者软件控制变换吧,变换之后就是固定状态吧?难道你设计的软件、硬件系统运行时,这一时刻A端口是rs485半双工管理软件,下一时刻“同一个”A端口又运行RS232全双工管理软件?那你的通信对象是什么接口?呵呵。敬佩。

“不过实际使用的时候只会接其中一个而已.......”没错,既然使用时只会接其中一个,那就接什么相应用什么软件。——就别在讨论RS485控制方法时混谈RS232。等你切换到RS232全双工点到点2点通信方式时,也别再同时考虑RS485半双工一点到多点主从通信网络。两套独立的软件模块,(很少的公共共享调用函数)。

LZ自己24楼可说的是“的确是同一时间、同一UART上即有232又有485,...”同一时间?前后说的矛盾耶。既然你一个UART可以同时管理控制RS232/RS485,那你采用16C554干什么?

硬件图纸还没有呢,就编程序?

使用特权

评论回复
28
冷漠| | 2009-9-10 21:29 | 只看该作者
本帖最后由 冷漠 于 2009-9-10 21:31 编辑

RS232接口驱动器是不需要切换方向的。
RS485接口驱动器是需要切换通信方向的。

同时支持RS232和RS485的端口,即插即用,自动检测——变换电路?佩服。
关键是即使这样做了,有什么意义?既不能提高性价比又不能提高可靠性。反而需要更多的电子切换电路和复杂的检测、控制软件。贵公司专利电路?

使用特权

评论回复
29
donkey89| | 2009-9-23 09:40 | 只看该作者
实际的情况是好多直接要求RS232转485以延长通信距离,软件不能改,除了RXD和TXD,其他脚统统无效.

使用特权

评论回复
30
3533630| | 2014-2-8 11:30 | 只看该作者
学习一下

使用特权

评论回复
31
shuishui88| | 2014-7-17 17:06 | 只看该作者
请问lz有没有具体的max13487的连接方法?我现在遇到一个问题就是只能发送不能接受  不明白怎么回事

使用特权

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

本版积分规则