欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

【STM32】(F207)_HAL库开发教程(四)—串口FIFO使用

程序员文章站 2022-03-09 22:05:50
前言...

前言

不必害怕未知,无需恐惧犯错,做一个Creator!

本文主要介绍STM32_HAL库开发中串口_FIFO的使用。

一、开发步骤

1. Cubemx配置

  1. 在左侧引脚配置栏选择目标串口号
  2. 在串口模式处配置串口模式为异步通信模式
  3. 在串口配置处配置中断使能和串口参数:波特率、数据长度、停止位、发送接收模式等。(注意在GPIO引脚处和硬件引脚进行确认)

【STM32】(F207)_HAL库开发教程(四)—串口FIFO使用

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://blog.csdn.net/weixin_44064233/article/details/108328146