。。。
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没有此功能,这一点比较遗憾。
以上的是上周末(12月4日)写的帖子,得到了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位数据格式即可,使用起来更加方便!!