求教,stm32做一主多从通讯怎么做的呢?我知道主向从发数据可以用以下模式唤醒。
USART_WakeUpConfig(USART3, USART_WakeUp_AddressMark);
USART_SetAddress(USART3, 0x05);
USART_ReceiverWakeUpCmd(USART3, ENABLE);
现在主要问题不知道,主机怎么判断数据是哪个从机发送过来的,从机向主机发送数据的协议一般是怎样的。求大神指导一下。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一对多是半双工通信,主机像老师,从机是学生。
平时子机都要闭嘴,随时听主机说话;
主机说话,要区分对象是谁,内容必须包含对方的ID;
主机的字数是事先约定的,不能多说一个字,然后主机也要闭嘴,同时竖起耳朵听,直至下次开口;
下面该从机答话,中间组织语言的延迟不能超过约定时间,字数同样是约定的,不许多说一个字。
明白这个道理,可以自己编写协议。
是的,我是给从机分配了地址,主机发送数据给从机也没问题。
但是从机发送数据给主机是不是应该先检查发送线是不是空闲,而且哪个从机什么时候发数据给主机,这个怎么判断?
是用你说的那个modbus协议吗?
好的,道理明白了,有没有一种通常的协议和做法,我怕自己写的协议会出现不稳定的情况。
但是加上释放总线的时候,数据的错误率很多。我是这样做的,从机收完数据后(3.5字节时间没有新数据)而且是自己的地址,将TX设置成GPIO_Mode_AF_PP。然后从机发送数据到主机,发送完后(判断USART_IT_TC位)将TX设置成GPIO_Mode_IN_FLOATING。
按照上面的说法做,数据错误率接近50%。如果不进行从机TX的设置数据不会出错。但是这样又不能实现多机通讯了。
主机的RXD管脚加上拉电阻,不知道会不会好点!
一周热门 更多>