OpenEdv-开源电子网

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

STM32多机通信与51单片机的不同

[复制链接]

12

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2014-8-6
在线时间
8 小时
发表于 2015-12-4 17:28:53 | 显示全部楼层 |阅读模式
近两日测试了一下STM32的多机通信功能,结合之前使用的51单片机,对本功能有了一些新的认识。
虽然,使用8位数据格式,结合通信协议,同样能实现主从结构的多机通信功能,但是使用单片机提供的硬件多机通信功能,具有独特其的优势。使用单片机提供的硬件多机通信功能,一方面可以使用硬件功能,来提高串口通信的抗干扰能力;另一方面,当从机的数量比较多时,“可以显著减少由未被寻址的接收器的参与带来的多余的USART服务开销”(见STM32中文参考手册V10 P526)。

一。STM32从机源代码:
void uart_init(u32 bound){
。。。
USART_WakeUpConfig(USART2,USART_WakeUp_AddressMark);//静默模式设置:地址标记唤醒 
USART_SetAddress(USART2, 0x1);           //设置地址  从机1 
USART_ReceiverWakeUpCmd(USART2,ENABLE);          //使能接收唤醒 

二。 STM32多机通信的特别说明:
从机地址为4位,即0~15,也就是最多16个从机。具体见芯片资料。

三。51单片机多机通信的特别说明:
设置串口方式2或3,从机的SM2置1。主机的TB8设置为1,发送即为地址字节。具体见芯片资料。

四。 STM32与51的比较:
1. STM32为硬件唤醒,当地址相同时,从机退出静默模式,开始接收数据。而51则多了一步,需要用户的程序识别地址是否相符,如相符用户需设置SM2为0,开始接收数据。
2. STM32只有4位地址,至多16个从机。51可以多至256个。
3.  当只有一主一从时,51可以利用串口方式3,设置出指令字节或数据字节(tb8=1时,为指令字节,否则为数据字节)。而STM32没有此功能,这一点比较遗憾。




以上的是上周末(124日)写的帖子,得到了ricefat 特别是xuande老师的指教。昨天我又做了些针对性的实验,下面对这篇帖子再做如下改正:

虽然,使用8位数据格式,结合通信协议,同样能实现主从结构的多机通信功能,但是使用单片机提供的硬件多机通信功能,具有独特其的优势:其一,使用地址硬件识别功能,做为抗干扰的第一道防线,来提高串口通信的抗干扰能力;另一方面,当通信的数据量非常多时,“可以显著减少由未被寻址的接收器的参与带来的多余的USART服务开销”(见STM32中文参考手册V10 P526)。
一。STM32从机源代码:
void uart_init(u32 bound){

。。。
USART_InitStructure.USART_WordLength = USART_WordLength_9b;//字长为9位数据格式

。。。
USART_WakeUpConfig(USART2,USART_WakeUp_AddressMark);//静默模式设置:地址标记唤醒 
USART_SetAddress(USART2, 0x1);           //设置地址  从机1 
USART_ReceiverWakeUpCmd(USART2,ENABLE);          //使能接收唤醒 


二。 STM32多机通信的特别说明:
从机硬件地址为4位,即0~15,也就是最多16个硬件从机地址。具体见芯片资料。

三。51单片机多机通信的特别说明:
设置串口方式2或3,从机的SM2置1。主机的TB8设置为1,发送即为地址字节。具体见芯片资料。

四。 STM32与51的比较:
1. STM32为硬件唤醒,当地址相同时,从机退出静默模式,开始接收数据。而51则多了一步,需要用户的程序识别地址是否相符,如相符用户需设置SM2为0,开始接收数据。
2. STM32只有4位硬件地址,至多16个从机,如需更多地址,可以通过增加软件地址字节来扩展。51可以多至256个。
3.  当只有一主一从时,51可以利用串口方式3,设置出指令字节或数据字节(tb8=1时,为指令字节,否则为数据字节)。而STM32设置为9位数据格式即可,使用起来更加方便!!


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

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2015-12-4 17:36:59 | 显示全部楼层
额 因为STM32有更好的多机通讯方式,CAN,i2c,SPI,以太网,SDIO接口的WIFI
回复 支持 反对

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11474
金钱
11474
注册时间
2014-4-1
在线时间
1297 小时
发表于 2015-12-4 18:03:11 | 显示全部楼层
对LZ的比较结果补充一下:

1、STM32的地址比对为硬件方式。
  这一点对节省功耗的意义不大,因为51也可以做到这一点(使用接收中断,然后比对地址);
  但使用时更方便一点。

2、使用串口的一主多从方式,无论51还是STM32,从机都可以是无穷多个。地址用多字节表示就可以做到。
  对于51,只要多比较一下,
  对于STM32,只要用软件比较其他的高位数据。
  当然,从机越多,线越长,就要统筹考虑波特率和芯片驱动能力。

3、多年不做51,忘了模式3是怎么回事,不明白LZ的遗憾。
  但我相信STM32更先进,可以全面覆盖51的功能。
回复 支持 反对

使用道具 举报

12

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2014-8-6
在线时间
8 小时
 楼主| 发表于 2015-12-5 20:40:26 | 显示全部楼层
回复【3楼】xuande:
---------------------------------
谢谢老师指教!
关于第二点,你的思路是不是:某个从机首先硬件地址唤醒后,再接收一个扩展的软件地址字节,如果本字节确实是本机地址,就继续接收数据,否则的话就再进入静默模式。
关于第三点,将51的串口模式3(9位数据格式),不是用于多机通信,而是用于一主一从通信。使从机的SM2=0,则接收到的最高位MSB8,用于指示收到的字节是指令字节还是数据字节。比如,如果收到的MSB8=1,则收到的字节即为指令字节。这样的通信结构非常简洁。
STM32没有了用户可参与的9位数据格式,也就是用户不能设置/判断MSB8了,感觉比较遗憾。
回复 支持 反对

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11474
金钱
11474
注册时间
2014-4-1
在线时间
1297 小时
发表于 2015-12-5 22:09:17 | 显示全部楼层

2、是这样。如果字节再多些,就可以有更多的子机了。
  理论上可以有无穷多个。

3、STM32同样有9位格式。这个“遗憾”是不存在的。仔细看手册。



回复 支持 反对

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11474
金钱
11474
注册时间
2014-4-1
在线时间
1297 小时
发表于 2015-12-5 22:14:29 | 显示全部楼层
指令与数据的区分,其实就是个思路问题,或者说逻辑问题。

即使没有第9位,同样可以用第8位来完成第9位的任务,只是后面剩下7位,不符合整字节的习惯。
回复 支持 反对

使用道具 举报

12

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2014-8-6
在线时间
8 小时
 楼主| 发表于 2015-12-6 16:00:32 | 显示全部楼层
回复【6楼】xuande:
---------------------------------
嗯,是的。 再次谢谢老师指教!
回复 支持 反对

使用道具 举报

1

主题

232

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3328
金钱
3328
注册时间
2015-4-19
在线时间
366 小时
发表于 2020-1-20 15:05:21 | 显示全部楼层
谢谢分享!
回复 支持 反对

使用道具 举报

0

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2014-3-3
在线时间
10 小时
发表于 2020-1-21 14:43:50 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2022-8-17
在线时间
7 小时
发表于 2022-10-16 23:22:51 | 显示全部楼层
楼主可以分享下程序源码吗?谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 00:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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