OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8880|回复: 11

stm32串口多机通讯,一主多从

[复制链接]

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2016-7-11
在线时间
16 小时
发表于 2016-7-12 09:21:46 | 显示全部楼层 |阅读模式
求教,stm32做一主多从通讯怎么做的呢?我知道主向从发数据可以用以下模式唤醒。
USART_WakeUpConfig(USART3, USART_WakeUp_AddressMark);
USART_SetAddress(USART3, 0x05);
USART_ReceiverWakeUpCmd(USART3, ENABLE);

现在主要问题不知道,主机怎么判断数据是哪个从机发送过来的,从机向主机发送数据的协议一般是怎样的。求大神指导一下。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11428
金钱
11428
注册时间
2014-4-1
在线时间
1287 小时
发表于 2016-7-12 09:57:26 | 显示全部楼层
本帖最后由 xuande 于 2016-7-12 09:58 编辑


一对多是半双工通信,主机像老师,从机是学生。

平时子机都要闭嘴,随时听主机说话;
主机说话,要区分对象是谁,内容必须包含对方的ID;
主机的字数是事先约定的,不能多说一个字,然后主机也要闭嘴,同时竖起耳朵听,直至下次开口;
下面该从机答话,中间组织语言的延迟不能超过约定时间,字数同样是约定的,不许多说一个字。

明白这个道理,可以自己编写协议。



回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2016-7-11
在线时间
16 小时
 楼主| 发表于 2016-7-12 09:57:27 | 显示全部楼层
yklstudent 发表于 2016-7-12 09:36
给每个从机分配一个地址就可以了, 地址可以动态分配也可以固定;
这个取决于你的软件控制了;
固定的地 ...

是的,我是给从机分配了地址,主机发送数据给从机也没问题。
但是从机发送数据给主机是不是应该先检查发送线是不是空闲,而且哪个从机什么时候发数据给主机,这个怎么判断?
是用你说的那个modbus协议吗?
回复 支持 反对

使用道具 举报

11

主题

56

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-12-7
在线时间
48 小时
发表于 2016-7-12 10:04:57 | 显示全部楼层
dickbbk 发表于 2016-7-12 09:57
是的,我是给从机分配了地址,主机发送数据给从机也没问题。
但是从机发送数据给主机是不是应该先检查发 ...

用485吧,比较省事
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2016-7-11
在线时间
16 小时
 楼主| 发表于 2016-7-12 10:07:34 | 显示全部楼层
xuande 发表于 2016-7-12 09:57
一对多是半双工通信,主机像老师,从机是学生。

平时子机都要闭嘴,随时听主机说话;

好的,道理明白了,有没有一种通常的协议和做法,我怕自己写的协议会出现不稳定的情况。
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2016-7-11
在线时间
16 小时
 楼主| 发表于 2016-7-26 11:07:17 | 显示全部楼层
现在做了个类似modbus协议的通讯,主机发送到从机,从机接收到然后发送回给主机。(直接串口TTL)
但是加上释放总线的时候,数据的错误率很多。我是这样做的,从机收完数据后(3.5字节时间没有新数据)而且是自己的地址,将TX设置成GPIO_Mode_AF_PP。然后从机发送数据到主机,发送完后(判断USART_IT_TC位)将TX设置成GPIO_Mode_IN_FLOATING。
按照上面的说法做,数据错误率接近50%。如果不进行从机TX的设置数据不会出错。但是这样又不能实现多机通讯了。
回复 支持 反对

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2016-7-26 12:36:16 | 显示全部楼层
dickbbk 发表于 2016-7-26 11:07
现在做了个类似modbus协议的通讯,主机发送到从机,从机接收到然后发送回给主机。(直接串口TTL)
但是加 ...

主机的RXD管脚加上拉电阻,不知道会不会好点!
让我们的思维驾驭在电的速度之上!
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2016-7-11
在线时间
16 小时
 楼主| 发表于 2016-7-27 21:58:24 | 显示全部楼层
DongInker 发表于 2016-7-26 12:36
主机的RXD管脚加上拉电阻,不知道会不会好点!

谢谢啦,我把主机的RX设置成下拉就解决了
回复 支持 反对

使用道具 举报

32

主题

230

帖子

0

精华

高级会员

Rank: 4

积分
508
金钱
508
注册时间
2016-4-14
在线时间
113 小时
发表于 2016-10-12 11:34:16 | 显示全部楼层
楼主能给予点指点吗~谢谢了~有源码就更好了~谢谢你哈
回复 支持 反对

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-10-12 11:51:11 | 显示全部楼层
这种说白了就是自己制定一个简单的软件通讯机制就行。。简单、
shop60994719.taobao.com
回复 支持 反对

使用道具 举报

12

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2017-7-17
在线时间
40 小时
发表于 2017-7-18 13:27:20 | 显示全部楼层
楼主可以指导一下吗,我现在也要实现232的多点通信,但不知道从机地址具体怎么分配
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2017-7-18
在线时间
1 小时
发表于 2017-7-18 17:24:29 | 显示全部楼层
硬件电路改动一下,在每个从机向主机发送的电路中增加二极管
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-12-19 00:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表