OpenEdv-开源电子网

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

stm32多机通信问题

[复制链接]

13

主题

46

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2014-12-24
在线时间
48 小时
发表于 2018-6-27 19:19:43 | 显示全部楼层 |阅读模式
10金钱


目前项目需求需要使用一个单片机(主机)同时和5个单片机(从机)同时通信,(需实现主机向从机发送数据,从机接收正确返回确认数据,从机还需检测开关信号,开关信号置位后返回数据给主机),使用的单片机为stm32F103RE。

以知的通信方式有 1,主机通过5个串口一对一通信,但stm32只有5路串口如果后续增加从机硬件不满足,故舍弃
                         2,采用485总线通信,从机设置为接收模式,采用逐一查询方式接收从机数据。实现方式比较复杂,不知大家能提供什么好的思路么,谢谢

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

1954

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4510
金钱
4510
注册时间
2018-5-11
在线时间
944 小时
发表于 2018-6-27 19:25:09 | 显示全部楼层
这要根据实际需要来定,
如果可以有线连接,一般是485或CAN
如果是无线方式连接,可以用RF24L01
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

13

主题

46

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2014-12-24
在线时间
48 小时
 楼主| 发表于 2018-6-27 19:54:05 | 显示全部楼层
warship 发表于 2018-6-27 19:25
这要根据实际需要来定,
如果可以有线连接,一般是485或CAN
如果是无线方式连接,可以用RF24L01

有线连接,想使用485,不知道轮训方式具体实现思路
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-6-27 20:02:06 | 显示全部楼层
数据量不大,自己定个协议,一个串口就能对无数个从机呀,看看modbus
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2018-6-27 20:18:55 | 显示全部楼层
每个从机一个地址,1-5,主机轮询读取1-5地址的数据就行了
一分耕耘一分收获。
回复

使用道具 举报

2

主题

685

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3448
金钱
3448
注册时间
2017-7-4
在线时间
869 小时
发表于 2018-6-28 00:18:28 | 显示全部楼层
用CAN,比485来得可靠简单。
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-6-28 08:34:16 | 显示全部楼层
给1号从机发询问命令,等待1号机回复。然后给2号机发询问命令,等待2号机回复。依次询问下去,可以设置一个等待超时时间,如果超过规定时间没有收到从机回复数据,就认为从机故障,跳过本从机号,继续询问下一个从机。
回复

使用道具 举报

19

主题

246

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2017-9-21
在线时间
171 小时
发表于 2018-6-28 08:41:35 | 显示全部楼层
多机有线还是推荐CAN
回复

使用道具 举报

2

主题

168

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2018-5-14
在线时间
69 小时
发表于 2018-6-28 09:13:11 | 显示全部楼层
按你的需要的数据量来说,一主机对多从机的串口方式是比较合适的,不过具体接口就得看你的“主机”与“从机”的相对位置了。
如果是板级(主机芯片从机芯片处于同一线路板,或同一个装置内,使用相同的电源)的,可以考虑SPI、异步串口都可以,直接TTL级别通讯即可,不需要任何其它接口电路(可以适当的加容阻滤波,具体值根据传输速率决定);如果是多台机器,但距离比较近的话,考虑232接口就能满足你的要求;如果距离比较远(232通讯距离一般也就几米),那就考虑485或CAN,甚至以太网、无线、PBus等等,可选的也很多啊。
PS:一主多从的总线实现方式可以说是基本入门级的,不知道你所谓的复杂是指的什么。
回复

使用道具 举报

13

主题

46

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2014-12-24
在线时间
48 小时
 楼主| 发表于 2018-6-28 09:46:58 | 显示全部楼层
kvdong 发表于 2018-6-28 09:13
按你的需要的数据量来说,一主机对多从机的串口方式是比较合适的,不过具体接口就得看你的“主机”与“从机 ...

项目需求是同一装置内,相同电源供地。一对五,单片机内部5路串口,采用一对一,虽说实时性高,但是全部占用串口,片内资源会有点紧张,故舍弃,想采用总线485(CAN总线已被占用)。由于之前未使用过总线通信,目前了解的实现方式是,主机逐一查询从机,然后设置延时等待和等待超时,不知怎么设置,能提高实时性
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7531
金钱
7531
注册时间
2016-11-30
在线时间
641 小时
发表于 2018-6-28 10:04:48 | 显示全部楼层
如果丛机需要主动发送数据给主机,还是用CAN吧,用485总线很容易出问题。如果丛机不需要主动发送数据,485还是可以实现的。
回复

使用道具 举报

2

主题

168

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2018-5-14
在线时间
69 小时
发表于 2018-6-28 11:59:58 | 显示全部楼层
1812090658@qq.c 发表于 2018-6-28 09:46
项目需求是同一装置内,相同电源供地。一对五,单片机内部5路串口,采用一对一,虽说实时性高,但是全部 ...

同一个装置内还用啥总线呀,SPI也行,USART也行,直接脚对脚连接即可。
回复

使用道具 举报

13

主题

46

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2014-12-24
在线时间
48 小时
 楼主| 发表于 2018-6-28 12:16:12 | 显示全部楼层
kvdong 发表于 2018-6-28 11:59
同一个装置内还用啥总线呀,SPI也行,USART也行,直接脚对脚连接即可。

这个问题我也想过,使用串口,直接脚对脚,实时性有保证,且不需要考虑主从机问题。你有没有试过STM32的5路串口同时使用,设计好优先级,同时接收后者发送大量数据,会不会出现中断混乱数据丢失,或者影响其他进程运行哈。
回复

使用道具 举报

3

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
185
金钱
185
注册时间
2018-4-22
在线时间
39 小时
发表于 2018-6-28 12:27:25 | 显示全部楼层
你自己写的方式2,不止可用于485总线方式,232方式也是一样的.当然如果总线长度不超过50CM,你就直接用自带的电平也无所谓. 而且485一点也不麻烦啊......
回复

使用道具 举报

2

主题

168

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2018-5-14
在线时间
69 小时
发表于 2018-6-28 13:50:27 | 显示全部楼层
1812090658@qq.c 发表于 2018-6-28 12:16
这个问题我也想过,使用串口,直接脚对脚,实时性有保证,且不需要考虑主从机问题。你有没有试过STM32的5 ...

5路串口同时使用也没关系呀,出现中断混乱只能说明一种情况,软件设计不合理,跟硬件没关系。
当然了,具体到你自己的项目,你可以考虑一下你的串口需要的速率,数据量,结合着芯片的数据手册做一下比较。一般来说,串口相对于MCU来说都属于“低速”设备,如果5路串口同时用会影响到芯片运行,那么这款芯片本身可能就是失败品吧。
回复

使用道具 举报

2

主题

168

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2018-5-14
在线时间
69 小时
发表于 2018-6-28 13:55:29 | 显示全部楼层
1812090658@qq.c 发表于 2018-6-28 12:16
这个问题我也想过,使用串口,直接脚对脚,实时性有保证,且不需要考虑主从机问题。你有没有试过STM32的5 ...

我刚做了一款产品,STM32F103RC,使用资源包括一路I2C,三路SPI,5路USART,1路CAN,基本把这款芯片的串口用遍了,也没什么中断混乱的地方,当然也可能跟我的系统设计的串口要求的速率都不高有关吧。
回复

使用道具 举报

8

主题

206

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-4-6
在线时间
234 小时
发表于 2018-6-28 18:36:07 | 显示全部楼层
刚好在搞这块,目前我的项目是一个主机带8个丛机,采用485通信。其实你只需要控制好时序(控制接受,发送引脚,使总线上是半双工),自己定义好协议,问题就不大。不过采用485必须保证每一个设备的485芯片不能坏,否则总线瘫痪。一个设备都通信不了。这个也是485总线的缺点。
回复

使用道具 举报

31

主题

1954

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4510
金钱
4510
注册时间
2018-5-11
在线时间
944 小时
发表于 2018-6-28 19:04:40 | 显示全部楼层
根据你描述的项目的情况,
个人感觉用SPI比较好,
速度快,可达50M,
装置一致性好,用一套参数即可。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

0

主题

31

帖子

0

精华

高级会员

Rank: 4

积分
653
金钱
653
注册时间
2017-5-29
在线时间
139 小时
发表于 2018-6-29 22:14:36 | 显示全部楼层
同意楼上的,用片选方式做轮询问,如果距离远可以用485, 或者232,如果距离近用SPI,I2C,USART
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 11:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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