文档库 最新最全的文档下载
当前位置:文档库 › STM32多机通信

STM32多机通信

STM32多机通信
STM32多机通信

利用USART可以进行多机处理器通信,可以将多个USART连接成一个网络,设置一个是主设备,其他为从设备。其实现原理就是使从机处于静默模式,由主机在需要的时候发送指令唤醒从机,并传输数据事项相应的功能。STM32静默模式特点:1、所有接收状态位都不会被设置;2、所有的接收中断都被禁止;3、USART_CR1寄存器中的RWU位被置1,RUW可以硬件自动控制或者在某些条件下由软件写。

连接方法很简单,主机的TX输出与从机的RX端口直接相连,从机TX端口要经过与非门与主机RX端口连接。

多机通信方式有2种:空闲帧唤醒和地址唤醒。

空闲帧唤醒可以同时唤醒所有从机,在从机处于静默模式时发送空闲帧(即所有位均为1的数据),唤醒多个从机,开始动作,实现多个从机同步工作。

地址唤醒可以唤醒单个从机,不同地址唤醒不同从机,在从机静默时发送地址帧,从机自动对比地址,如果地址配对正确则该从机唤醒,否则继续进入静默。这样只有被寻址者才被激活,来接收随后的数据,这样就可以减少由未被寻址的接收机器参与带来的多余的USART服务开销。这种模式下,MSB为1的字节被认为是地址,否则被认为是数据(MSB一般为数据传送的最高位,8位传送则MSB 为第八位;9位传送则MSB为第九位)。在一个地址字节中,目标接收者的地址放在低4位。这4位会被接收器拿来和设置在USART_CR2寄存器中ADD位中的自身地址比较。当接收到一个和设置地址相匹

配的地址字符时,USART退出静默模式。RWN被清除,后面的字节也将正常接收。因为RWU位已经被清除,RXEN位会因为接收到地址符被置1。当从机再次接收到地址符,如若地址不匹配则从机再次进入静默模式。

程序实际编写时可以注意以下3部分的设置:

一、设置静默模式:

函数原形void USART_WakeUpConfig(USART_TypeDef* USARTx, u16 USART_WakeUp)

其中USART_WakeUp:USART 的唤醒方式:

1、USART_WakeUp_IdleLine空闲总线唤醒

2、USART_WakeUp_AddressMark地址标记唤醒

二、地址唤醒中地址设置:

函数原形void USART_SetAddress(USART_TypeDef* USARTx, u8 USART_Address)

其中USART_Address:是设置USART 节点的地址。

例如:USART_SetAddress(USART2, 0x5);

三、检查是否进入静默:

函数原形void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState Newstate)

其中NewState: USART 静默模式的新状态这个参数可以取:ENABLE或者DISABLE,从机中一般如果要求开机便静默的话可以将NewState设置为ENABLE。

其实在本人写的多机通信中使用的是51单片机做主机,2个STM32做从机通信。51单片机用串口发送时只要与从机波特率和发送数据位数设置一致就可以实现多机通信。

粗略小结还望大家多多指教。

相关文档