使用cube配置9位串口多机通信

9位串口的多机通信

模拟主从机采用9位串口加静默模式的方式进行多机通信。

通过串口实现多机通信,采用9数据位的方式,当第九位为1时,表示8位的数据为地址数据,反之为0时表示8位的数据为要发送的数据,通信主从模型如下图所示。

使用cube配置9位串口多机通信_第1张图片

                                                                                             主从模型

Stm32串口支持9位数据位为多机通信时使用,多机通信时从机一般处于静默模式,唤醒方式有(1)空闲总线检测唤醒(2) 地址标记检测唤醒 两种方式,我们采用地址标记检测唤醒方式,在这个模式里,如果第9位是1,该字节被认为是地址,否则被认为是数据。在一个地址字节中,如果接收到的字节与从机的编程地址不匹配时, 从机串口进入静默模式。此时,接收该字节既不会设置空闲中断标志也不会产生中断或发出DMA请求当接收到的字节与接收器内编程地址匹配时, 串口退出静默模式。随后的数据字节被正常接收,调试的时候由于没有带9位的串口调试上位机,所以需要使用到逻辑分析仪,采集数据。

使用st的cubemx软件配置,以f103为例:

1:使能串口1,串口2,串口3;

2:使能串口为 多处理器通信模式;

3:修改数据位为9位,唤醒方式为address mark,然后给3个串口依次赋予地址;

4:最后打开3个串口的中断;

配置图如下:

使用cube配置9位串口多机通信_第2张图片


假如以串口一作为主机,则需要在生成代码后在串口2,串口3的初始化函数中加入

  /* USER CODE BEGIN USART2_Init 2 */
   HAL_MultiProcessor_EnterMuteMode(&huart2);
  /* USER CODE END USART2_Init 2 */

  /* USER CODE BEGIN USART3_Init 2 */
   HAL_MultiProcessor_EnterMuteMode(&huart3);
  /* USER CODE END USART3_Init 2 */

  函数,使其进入静默模式;

然后按照以上主从模型图中将串口1,2,3连接起来,当串口一发送9位地址加9位数据时,从串口收到9位的地址数据如果和自己的地址匹配,会触发串口中断,然后接收后面的9位数据,然后在中断处理函数中再次将其进入静默模式,如果不匹配,便不会触发中断,不会接收后面的数据,以此便完成了多处理器通信过程;

你可能感兴趣的:(串口)