STM32CubeIDE串口空闲中断实现不定长数据接收

STM32F051空闲中断实现串口不定长数据接收

目的

在串口输入不定长数据时,通过串口空闲中断来断帧接收数据。

编程软件

STM32CubeIDE
STM32CubeMX配置MCU。通过对端口配置,自动生成程序,减少编程量。

配置串口开中断

配置串口打开中断有两条指令,可以将这两条指令放在:
static void MX_USART1_UART_Init(void)下面,注意,还是要放在用户代码段,这样再重新生成C/C++软件时不会被清除。

/* USER CODE BEGIN USART1_Init 2 */
  __HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);//接收中断
  __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);//空闲中断

  /* USER CODE END USART1_Init 2 */

中断程序

在stm32f0xx_it.c文件下找到void USART1_IRQHandler(void),在其中的用户代码段中添加:

/* USER CODE BEGIN USART1_IRQn 0 */
	//接收中断
		uint8_t rxData = 0;
		if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE) != RESET)
		{
   
			HAL_UART_Receive(&huart1, &rxData, 1, 1000);
			if(Cnt < 256)
			{
   
				rx_buff[Cnt] = rxData;
				Cnt++;
			}
			__HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_RXNE);
		}
		// 空闲中断
		if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_IDLE) != RESET)
		{
   
			//一帧数据接收完成
			USART1_IdleCallback(rx_buff, Cnt);
			Cnt = 0;

			__HAL_UART_CLEAR_IDLEFLAG(&huart1);
		}

  /* USER CODE END USART1_IRQn 0 */
  // 此处是原来已经有的程序,保留:
  HAL_UART_IRQHandler(&huart1);

接着在这一部分的程序下面添加回调函数:

/* USER CODE BEGIN 1 */
//回调函数
void USART1_IdleCallback(uint8_t *pData,uint16_t len)
{
   
	while(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_TC) != SET);

	HAL_UART_Transmit(&huart1, pData, len, 1000);
}
/* USER CODE END 1 */

这一部分执行将串口输入的数据回显输出到串口。

运行结果

在这里插入图片描述

相关推荐

  1. STM32串口不定接收空闲中断

    2023-12-12 16:48:02       28 阅读
  2. stm32_HAL_串口不定数据接收发送

    2023-12-12 16:48:02       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-12 16:48:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-12 16:48:02       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-12 16:48:02       87 阅读
  4. Python语言-面向对象

    2023-12-12 16:48:02       96 阅读

热门阅读

  1. 在大量数据中查找重复的两个数

    2023-12-12 16:48:02       66 阅读
  2. python——第十六天

    2023-12-12 16:48:02       53 阅读
  3. 关于牛顿法计算潮流问题bug解决

    2023-12-12 16:48:02       66 阅读
  4. ffmpeg相关命令

    2023-12-12 16:48:02       61 阅读
  5. 【Axure视频教程】能直接修改的中继器表格

    2023-12-12 16:48:02       70 阅读
  6. Vue3+ts实现页面跳转及参数传递

    2023-12-12 16:48:02       418 阅读
  7. pta团体程序设计天梯赛——练习集(1-10题)

    2023-12-12 16:48:02       53 阅读
  8. 数据库基础DDL

    2023-12-12 16:48:02       58 阅读