STM32串口多机通信

2019-07-21 05:44发布

采用串口的休眠唤醒功能(地址唤醒)实现多机串口通信(一主多从)
在从机串口初始化函数中添加
// 从机串口设置
//    USART_WakeUpConfig(USART1,USART_WakeUp_AddressMark); //设置串口唤醒方式
//    USART_SetAddress(USART1,0x02); //设置串口节点地址
//    USART_ReceiverWakeUpCmd(USART1,ENABLE);//检查串口是否处于休眠状态
多个从机串联使用时:串口TX端口只能配置成复用开漏状态;
在从机主循环中添加此判断,根据主机发送的地址进行判断从机串口是否唤醒
//if((USART1->CR1 &((uint16_t)0x0002)) == 0) //CR1串口控制寄存器1其位1:RWU位是判断接收器的工作状态
//{
//    ... //在此添加要发给主机的内容
//}

主机串口初始化函数正常配置
如果是库函数自带的串口发送函数进行发送地址则不便于修改
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
故此仿照该函数写出发送地址的专用函数
void USART_SendAddr(USART_TypeDef* USARTx, uint16_t Addr)
{
    /* Check the parameters */
    assert_param(IS_USART_ALL_PERIPH(USARTx));
   
    Addr |= (uint16_t)0x0180;
   
    USARTx->DR = (Addr & (uint16_t)0x01FF);
}

可在主机主循环中使用按键等进行发送地址数据
case 1:    USART_SendData(USART1,++key1_data); break;
case 2:    USART_SendAddr(USART1,1);break;
case 3:    USART_SendData(USART1,--key1_data);break;
case 4: USART_SendAddr(USART1,2);break;

测试问题:
测试过程中只有两个从机,增加从机数量后不知道效果如何;
地址唤醒中的地址匹配会可能会出现重复


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。