在某些场合下须要进行三线制串口通讯(信号线只有一根),这就要求进行单线半双工的模式进行通讯。在这种状况进行数据协议传输的过程当中,信号端须要来回切换输入输出模式。或者能够将控制端口的发送和接口进行短接。那针对这种状况,STM32提供了half-duplex功能,只要在软件里面开启这项功能,芯片硬件层内部就会将发送和接收端口进行短接。具体的芯片如何寄存器操做这边不作赘述,能够本身手册usart篇进行查阅。咱们下面来看看如何利用cubeMx进行配置。函数
本文使用的STM32F0芯片,打开cubeMx在Pinout标签也下的USART1的mode 使能Sigle Wire(Half-Duplex)。以下图所示。
学习
其余配置跟普通的usart配置同样没有区别。注意这个时候硬件连线的时候须要接在TX端口。测试
配置完成生产代码以后,在main函数中利用添加代码进行测试。ui
每次发送须要使能相应的功能
HAL_HalfDuplex_EnableTransmitter
。code
同理,接收数据前也要使能相应的功能
HAL_HalfDuplex_EnableReceiver(&huart1);
接口
while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ static uint8_t test = 6; //使能发送功能,每次发送前须要调用此函数 HAL_HalfDuplex_EnableTransmitter(&huart1); HAL_UART_Transmit(&huart1, &test, 1, 2000); //使能接收功能。每次接收前须要调用此函数 HAL_HalfDuplex_EnableReceiver(&huart1); HAL_UART_Receive(&huart1, &res, 1, 2000); if (res==6) { test++; } }
-----------------本文做者“智御电子”,期待与电子爱好者交流学习。----------------get