在某些場合下須要進行三線制串口通訊(信號線只有一根),這就要求進行單線半雙工的模式進行通訊。在這種狀況進行數據協議傳輸的過程當中,信號端須要來回切換輸入輸出模式。或者能夠將控制端口的發送和接口進行短接。那針對這種狀況,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