【STM32】HAL庫開發教程(四)—串口FIFO使用

前言

沒必要懼怕未知,無需恐懼犯錯,作一個Creator!緩存

本文主要介紹STM32_HAL庫開發中串口_FIFO的使用。異步

1、開發步驟

1. Cubemx配置

  1. 在左側引腳配置欄選擇目標串口號
  2. 在串口模式處配置串口模式爲異步通訊模式
  3. 在串口配置處配置中斷使能和串口參數:波特率、數據長度、中止位、發送接收模式等。(注意在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

感謝你的閱讀,期待你的關注收藏點贊!接口

相關文章
相關標籤/搜索