前言
沒必要懼怕未知,無需恐懼犯錯,作一個Creator!緩存
本文主要介紹STM32_HAL庫開發中串口_FIFO的使用。異步
1、開發步驟
1. Cubemx配置
- 在左側引腳配置欄選擇目標串口號
- 在串口模式處配置串口模式爲異步通訊模式
- 在串口配置處配置中斷使能和串口參數:波特率、數據長度、中止位、發送接收模式等。(注意在GPIO引腳處和硬件引腳進行確認)
2. 中斷函數編寫
生成KEIL文件後,編寫中斷響應函數。函數
void USART2_IRQHandler(void) { /* USER CODE BEGIN USART2_IRQn 0 */ /* USER CODE END USART2_IRQn 0 */ HAL_UART_IRQHandler(&huart2); /* USER CODE BEGIN USART2_IRQn 1 */ InterRxBufferWrite(); /* USER CODE END USART2_IRQn 1 */ }
3. 功能函數編寫
此處使用環形FIFO緩存區對串口數據進行處理,所以編寫環形FIFO緩衝區的功能函數學習
uint8_t InterRxBufferWrite(void) //串口接收緩衝區寫函數 { if (InterFifo.RxBufferWptr == (InterFifo.RxBufferRptr - 1)) //串口緩衝區滿了 { return 0; } HAL_UART_Receive_IT(&huart2, &InterFifo.RxBuffer[InterFifo.RxBufferWptr++], 1); InterFifo.RxBufferWptr %= INTER_BUFFER_NUM;//寫入一個字節數據到緩衝區中 return 1; } uint8_t InterRxBufferRead(uint8_t* data) //串口接收緩衝區讀函數 { if (InterFifo.RxBufferRptr == InterFifo.RxBufferWptr) //串口緩衝區爲空 { return 0; } *data = InterFifo.RxBuffer[InterFifo.RxBufferRptr++]; //從緩衝區讀取一個字節數據並返回 InterFifo.RxBufferRptr %= INTER_BUFFER_NUM; return 1; } uint8_t InterTxBufferWrite(uint8_t data) //串口發送緩衝區寫函數 { if(InterFifo.TxBufferWptr == (InterFifo.TxBufferRptr - 1)) //串口緩衝區滿了 { return 0; } InterFifo.TxBuffer[InterFifo.TxBufferWptr++] = data; InterFifo.TxBufferWptr %= INTER_BUFFER_NUM; //寫入一個字節數據到緩衝區中 return 1; } uint8_t InterTxBufferRead(uint8_t* data) //串口發送緩衝區讀函數 { if(InterFifo.TxBufferRptr == InterFifo.TxBufferWptr) //串口緩衝區爲空 { return 0; } *data = InterFifo.TxBuffer[InterFifo.TxBufferRptr++]; //從緩衝區讀取一個字節數據並返回 InterFifo.TxBufferRptr %= INTER_BUFFER_NUM; return 1; }
2、主要接口函數
1. 串口中斷函數
void USART2_IRQHandler(void):
若是設置爲接收中斷,則沒收到一個字節出發一次中斷。
注意添加使用串口接收中斷配置函數:__HAL_UART_ENABLE_IT(&huart2, UART_IT_RXNE);
ui
2. HAL庫串口發送函數
HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
參數:串口名、串口數據地址、串口數據長度、超時時間
將指定地址和長度和數據經過串口進行發送
spa
3.HAL庫串口接收函數
HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
HAL庫串口接收函數
參數:串口名、串口數據地址、串口數據長度
接收指定長度的數據到指定數據地址。
3d
總結
本項目中串口的使用主要能夠概括爲:
1.串口環形FIFO緩衝區功能函數編寫
2.串口FIFO使用至串口中斷內
3.根據串口中斷使用靈活使用串口
code
提示:如有錯誤不足,歡迎批評指正。該系列文章僅供參考,歡迎互相學習交流。blog
感謝你的閱讀,期待你的關注收藏點贊!接口