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

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

目的

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

编程软件

STM32CubeIDE

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

配置串口开中断

配置串口打开中断有两条指令,可以将这两条指令放在:

static void MX_USART1_UART_Init(void)下面,注意,还是要放在用户代码段,这样再重新生成C/C++软件时不会被清除。

cpp 复制代码
/* 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),在其中的用户代码段中添加:

cpp 复制代码
/* 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);

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

cpp 复制代码
/* 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 */

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

运行结果

相关推荐
玩转单片机与嵌入式8 小时前
深入浅出TinyML 16:FFT、频带能量和MFCC分别适合什么任务?
stm32·深度学习·tinyml
深圳市宝华视联15 小时前
Python 读取 IP 视频流简单 Demo
python·嵌入式硬件·opencv·网络协议·tcp/ip·实时音视频·嵌入式实时数据库
恒锐丰科技韩生15 小时前
RB6005A|晶准 单节锂电池内置 MOS 保护芯片 DFN2×3‑8
嵌入式硬件·硬件工程
youshi666816 小时前
stm32-PWR、低功耗模式
stm32·单片机·嵌入式硬件
ACP广源盛1392462567316 小时前
Qwen3.8‑2.4T 开源落地@ACP#国产 Serdes 长距离视频传输芯片 GSV5800 在私有化 AI 服务中的价值与应用场景
大数据·数据库·人工智能·嵌入式硬件·矩阵·开源·音视频
Funing716 小时前
STM32 电机动态 PI 控制:从编码器反馈、增量式 PI 到 Matlab 参数拟合与 PWM 输出
stm32·嵌入式硬件·matlab·pi控制算法
云泽80817 小时前
深入浅出 STM32(十八):时钟树、总线与寄存器的底层联动机制
stm32·单片机·嵌入式硬件
米饭不加菜17 小时前
C51 语言参考手册
经验分享·笔记·单片机·嵌入式硬件
深圳市宝华视联17 小时前
院感约束下,手术室音视频布线与设备摆放实施注意事项
嵌入式硬件·音视频·实时音视频·视频编解码·嵌入式实时数据库
科芯创展18 小时前
2.7VIN,5VOUT,360KHz,电荷泵升压芯片,XZ3120
单片机