STM32 实现串口非定长的数据接收

本文介绍了如何在STM32上利用串口IDLE中断实现非定长数据的接收。通过配置STM32CubeMX和Keil,设置中断处理函数来检测总线IDLE状态,从而在数据帧传输结束后触发中断,将数据存入接收缓冲区,帧长度存储在全局变量中。
摘要由CSDN通过智能技术生成

简介

1、使用到的软件 STM32CubeMX 6.1.0 和keil 5.33
2、芯片 STM32L071CBT6
3、实现功能,按帧接收串口数据,数据存入接收buff,帧长存入全局变量

实现原理

当一帧数据传输结束之后,总线IDLE会维持高电平状态,此时就可以触发MCU的IDLE中断。因此利用IDLE中断进行串口不定长数据的接收。省去了用于检测传输是否完成的判断动作。
在这里插入图片描述
然而在HAL库中并未集成IDLE中断的处理,所以,我们可以在串口的中断处理中添加对IDLE总线状态的判断,以检测当前帧是否传输完成。

工程实现

1、CubeMX工程配制

(使能两个串口,串口1发送,串口2接收)

在这里插入图片描述

 串口DMA设置

在这里插入图片描述

中断使能

2、代码编辑

main.c全局变量定义

/* USER CODE BEGIN 0 */
uint8_t gcRXDBuffer[50], gcRXDPointer;    //接收的缓冲区、接收指针
uint16_t gcRXDLength; //接收的帧长度
uint8_t gcTXDBuffer[50], gcTXDPointer, gcTXDLength;    //发送的缓冲区,发送指针,发送的长度
uint8_t recv_end_flag; //接收完成标识
/* USER CODE END 0 */

函数 MX_USART2_UART_Init(void) 中添加

  /* USER CODE BEGIN USART2_Init 2 */
	__HAL_UART_ENABLE_IT(&huart2,UART_IT_IDLE);  //使能idle中断
	HAL_UART_Receive_DMA(&huart2,gcRXDBuffer,sizeof(gcRXDBuffer))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值