RS232多机通信这样连接可靠吗?距离较近,但发现从机发送,主机收不到。
http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_398873.jpg(原文件名:Image00000.jpg)
在上图中,MCU的TXDRXD 初始化为DDRX=0PORTX=0 在外面上拉了4.7k电阻,发现的问题是:主机同时控制多台从机能正常通信,
但当其中一台从机向主机发送数据时(这时全部从机都上电),主机不能收到,若把其它从机关电,相当于是一对一的,则可以 你的主机接收设置有问题,这种电路我试过,从机接收后不要有反应就好 两个从鸡输出串口要冲突的,必须隔离开来。 楼上,主机接收设置有问题及从机接收后不要有应就好,,,能说清楚点吗?
另外我还这样试过,不要MAX232, 全部直连,则不出现如上所说情况 谢谢:zxq6 小马哈
直接加个二极管隔离行吗?如下图(从机不发送时,MCU的TXD端为外上拉1,经MAX232后为-15V,所以另一从机发送时,不会有冲突),或者是如何隔离较好,请指教
http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_398974.jpg
(原文件名:Image00001.jpg) 改了一下,如上图 二极管隔离可能不行,因为232通信空闲的时候好像是高电平的。
你说全部直连不会出现问题,那你就可以尝试全部直连啊,为什么还要加232转换一次呢? 不加MAX232通信距离会不会受影响?另外,我还要和PC通信,所以要加MAX232 如果要距离,建议还是485. 用示波器测了一下,空闲时MAX232 TX输出 -8.6v 正常通信时是-6.9v---7.68v 佩服楼主的探索精神。
话又说回来,探索是必要的,但基础知识更重要。RS232是一个用了数十年的标准,电平定义,导线,接头,连接距离,连接方式等都是有标准的,要使连接可靠工作,你自己改的电路必需要符合起电气要求,否则就不稳定。
首先,RS232是电压驱动,逻辑定义为:+3V-+15V为逻辑0,-3V-+3V为未定义,-15V--3V为逻辑1,所有芯片或电路都应该遵循这个标准,否则就不叫RS232。
其次,RS232是设计成“点对点”连接的,即一个驱动器只能驱动一个接收器,如果要在一根线上接超过1个驱动器,就不能“简单连接”,必需想办法“隔离”驱动器之间的影响——RS232驱动器本身并没有这个机制。
(4楼的电路在从机输出-主机接收端接一个下拉电阻应该是可以工作的,但应该不能接太多从机) 这样的通信不可靠,最好别用.建议用485吧,不比232差. 4楼的电路可能用,我有成功应用的实例。注意多机通信分地址帧和数据帧。 我是计算机主机,2个单片机从机,为什么从机能接收到数据却不能返回数据呢?
主机:笔记本+USB转232模块
从机:2个SMT32F103RBT6,电平转换芯片:SP3232,地址分别是X和Y。
通信方式,主机发送一个,从机根据地址回答一个。9600波特率,设置都完全一样。同一个程序都烧到2个从机中。
连接关系:一个串口线分成2股,分别接2从机。
症状:关闭其中一个从机,另外一个从机通信正常。2个都打开,则都无返回数据。
PC发数据##XQP$$,其中头帧##,尾帧$$,X表示地址,显示2从机都接收到数据,但是地址是X的也不返回数据。
软件部分:不管是哪个从机都会完整的接收数据##XQP$$(在接受处理程序中,在##与$$设置灯闪,2从机都闪),但要求接受到自己的地址才处理,不是自己的什么都不做。
有个奇怪的问题:STM32一个用MAX3232,一个用SP3232,则同开机时候给SP3232发数据,完全正常有返回数据,但是MAX3232无数据返回,全部换成SP3232则都无返回数据。(因为网上说MAX3232很多不好用才都换成SP3232的,还是不行)。 谁有232多机通信成功实现的案例啊?给分享一下经验。QQ:6488904.在下感激不尽。 我现在在做串口直接三个单片机通信,也是能正常收到地址,但从机返回这个地址供主机确认,则主机接收不正确。
主机发送SBUF=2;
从机可以接收到数据,aa=SBUF;
但用if(aa==2)
{
SBUF=2;//返回供主机确认,则这句不能执行
} 波特率不一样~ 波特率都是这样的:
voidmain(void)
{
IP=0x00;
TMOD = 0x21; /*定时器1工作方式2;定时器0工作方式0*/
SCON = 0xf0; /*串口工作方式3,接收允许,接收地址*/
PCON = 0x00; /*波特率 不 加倍*/
TH1 = 0xFD; /*波特率 9600*/
TL1 = 0xFD;
TR1 = 1;/*定时器1开*/
PS = 1; /*串口中断优先级 高*/
// SM2=1;
EA = 1; /*开总中断*/
ES = 1; /*开串口中断*/
while(1)
{
CHOSE_key();
send_buf();
}
}
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 自己没做出来就别说不行,其实方法是人想出来的,既然一个可以通讯,2个为什么就不行呢?肯定是可以的,串一个二极管,然后上拉,记住主机某一个时刻只能和其中一个从机通讯,别无他法,只能用这种通讯模式了! 努力学习中 avr_appli 发表于 2008-9-3 09:25
谢谢:zxq6 小马哈
直接加个二极管隔离行吗?如下图(从机不发送时,MCU的TXD端为外上拉1,经MAX232后为-15 ...
哥们,你这个图能用吗?我也想做个类似的东西 验证过,确实可用!
页:
[1]