前言
不必害怕未知,無需恐懼犯錯,做一個Creator!
本文主要介紹STM32_HAL庫開發中串口_FIFO的使用,
一、開發步驟
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;
}
二、主要介面函式
1. 串口中斷函式
void USART2_IRQHandler(void):
如果設定為接收中斷,則沒收到一個位元組出發一次中斷,
注意添加使用串口接收中斷配置函式:__HAL_UART_ENABLE_IT(&huart2, UART_IT_RXNE);
2. HAL庫串口發送函式
HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
引數:串口名、串口資料地址、串口資料長度、超時時間
將指定地址和長度和資料通過串口進行發送
3.HAL庫串口接收函式
HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
HAL庫串口接收函式
引數:串口名、串口資料地址、串口資料長度
接收指定長度的資料到指定資料地址,
總結
本專案中串口的使用主要可以歸納為:
1.串口環形FIFO緩沖區功能函式撰寫
2.串口FIFO使用至串口中斷內
3.根據串口中斷使用靈活使用串口
提示:若有錯誤不足,歡迎批評指正,該系列文章僅供參考,歡迎互相學習交流,
感謝你的閱讀,期待你的關注收藏點贊!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/55711.html
標籤:AI
上一篇:docx.opc.exceptions.PackageNotFoundError: Package not found at .......
下一篇:Python中Arima預測問題
