简介
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))
本文介绍了如何在STM32上利用串口IDLE中断实现非定长数据的接收。通过配置STM32CubeMX和Keil,设置中断处理函数来检测总线IDLE状态,从而在数据帧传输结束后触发中断,将数据存入接收缓冲区,帧长度存储在全局变量中。
最低0.47元/天 解锁文章


被折叠的 条评论
为什么被折叠?



