CH32系列串口一主多从应用

硬件接线图:主机的RX端接上拉电阻,或者初始化IO时改RX为上拉输入。GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

主机的TX接所有从机的RX,所有从机的RX接主机的TX。

 

 

主机配置要素:需要将发送位数改为9bit,因为主机第九位写1代表发送的是从机地址,4-8写0,0-3写的地址(0-F),主机发送之后相应地址的从机会被唤醒准备接收后续数据。

例:USART_SendData(USART1, 0x104);//地址为4的从机会被唤醒准备接收主机数据。

USART_InitStructure.USART_BaudRate = baud;

USART_InitStructure.USART_WordLength = USART_WordLength_9b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

从机配置要素:

从机需要将TX 配置成复用开漏输出,GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;//否则发送数据时会导致短路(不发送的从机TX保持高电平,发送的从机会输出低电平),而设置成复用开漏输出并接上拉电阻就可以避免这种情况。

此外从机还需设置地址与接收地址唤醒,这样从机收到主机发送地址与自身匹配后,就唤醒串口,准备接收数据。地址不匹配的从机依然处于静默状态。

USART_SetAddress(USART1, 0x01); //设置USART1地址
USART_WakeUpConfig(USART1, USART_WakeUp_AddressMark);//地址唤醒
USART_ReceiverWakeUpCmd(USART1,ENABLE);
为了方便接收数据,需要使能主从机的中断接收。

 

 

posted @ 2024-02-02 17:33  WCH_CH32  阅读(241)  评论(0编辑  收藏  举报