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

2019-08-16 23:03发布

求教,stm32做一主多从通讯怎么做的呢?我知道主向从发数据可以用以下模式唤醒。
USART_WakeUpConfig(USART3, USART_WakeUp_AddressMark);
USART_SetAddress(USART3, 0x05);
USART_ReceiverWakeUpCmd(USART3, ENABLE);

现在主要问题不知道,主机怎么判断数据是哪个从机发送过来的,从机向主机发送数据的协议一般是怎样的。求大神指导一下。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
xuande
1楼-- · 2019-08-17 01:19
本帖最后由 xuande 于 2016-7-12 09:58 编辑


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

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

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



dickbbk
2楼-- · 2019-08-17 01:39
yklstudent 发表于 2016-7-12 09:36
给每个从机分配一个地址就可以了, 地址可以动态分配也可以固定;
这个取决于你的软件控制了;
固定的地 ...

是的,我是给从机分配了地址,主机发送数据给从机也没问题。
但是从机发送数据给主机是不是应该先检查发送线是不是空闲,而且哪个从机什么时候发数据给主机,这个怎么判断?
是用你说的那个modbus协议吗?
我不是萌妹子
3楼-- · 2019-08-17 02:58
 精彩回答 2  元偷偷看……
dickbbk
4楼-- · 2019-08-17 05:14
xuande 发表于 2016-7-12 09:57
一对多是半双工通信,主机像老师,从机是学生。

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

好的,道理明白了,有没有一种通常的协议和做法,我怕自己写的协议会出现不稳定的情况。
dickbbk
5楼-- · 2019-08-17 09:28
现在做了个类似modbus协议的通讯,主机发送到从机,从机接收到然后发送回给主机。(直接串口TTL)
但是加上释放总线的时候,数据的错误率很多。我是这样做的,从机收完数据后(3.5字节时间没有新数据)而且是自己的地址,将TX设置成GPIO_Mode_AF_PP。然后从机发送数据到主机,发送完后(判断USART_IT_TC位)将TX设置成GPIO_Mode_IN_FLOATING。
按照上面的说法做,数据错误率接近50%。如果不进行从机TX的设置数据不会出错。但是这样又不能实现多机通讯了。
DongInker
6楼-- · 2019-08-17 14:59
dickbbk 发表于 2016-7-26 11:07
现在做了个类似modbus协议的通讯,主机发送到从机,从机接收到然后发送回给主机。(直接串口TTL)
但是加 ...

主机的RXD管脚加上拉电阻,不知道会不会好点!

一周热门 更多>