标题:
STM32多机通信
[打印本页]
作者:
liuqq
时间:
2015-5-20 14:25
标题:
STM32多机通信
利用
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
位中的自身地址比较。当接收到一个和设置地址相匹配的地址字符时,
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
。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1