一、前言 最近在使用STM32的HAL库的时候,发现竟然没有集成IDLE中断处理,本身写的HAL库处理逻辑就挺繁琐,效率又不高,还缺胳膊少腿的。平时项目中的串口接收数据都是不定长的,而IDLE中断在这一块作用是非常大的,可以大大简化数据接收过程的判断。本文将介绍基于HAL库IDLE ...
串口持续地接收不定长 不定时的数据,把每一帧数据缓存下来且灵活地利用内存空间,下面提供一种方式供参考。原理是利用串口空闲中断和DMA,每当对方发来一帧完整的数据后,串口接收开始空闲,触发中断,在中断处理中新建一个接收队列节点,把DMA缓存的数据copy到接收队列里。当需要的时候就从接收队列里提出数据。定期清理队列防止堆空间溢出。 话不多说,上代码。 定义数据结构: 声明全局变量: 准备阶段: 在 ...
2019-12-18 18:24 0 1236 推荐指数:
一、前言 最近在使用STM32的HAL库的时候,发现竟然没有集成IDLE中断处理,本身写的HAL库处理逻辑就挺繁琐,效率又不高,还缺胳膊少腿的。平时项目中的串口接收数据都是不定长的,而IDLE中断在这一块作用是非常大的,可以大大简化数据接收过程的判断。本文将介绍基于HAL库IDLE ...
开发环境 参考博客 遇到的问题总结 不能仿真 编译优化等级 memset未声明 添加的源码 main.c usart.c usart.h stm32f1xx_it.c stm32f1xx_hal_msp.c TOC ...
参考文章:https://www.cnblogs.com/xingboy/p/10154475.html ...
以前用DMA实现接收不定长数据,DMA的方法接收串口助手的数据,全部没问题,不过如果接收模块返回的数据,而这些数据如果包含回车换行的话就会停止接收,例如接收:AT\r\nOK\r\n,就只能接收到AT\r,导致没有接收完成,具体原因还没搞懂,有了解的,希望可以告知一下,DMA不定长接收方法传输 ...
串口接收不定长数据 应用场景 搬运串口外设中长度未知的数据 通常用于下位机串口发送一帧的场合 问题:中断发送数据帧的速率很快,MCU来不及处理此次接收到的数据 在重新开启接收DMA通道之前 ...
源程序: IO口定义: void GPIO_ConfiguraTIon(void) { GPIO_InitTypeDef GPIO_InitStructure; /* 第1步:打开GP ...
中断,如下图; 6.配置路径,.c.h 后再点击GENERATE CODE 7 ...
STM32之串口DMA接收不定长数据 引言 在使用stm32或者其他单片机的时候,会经常使用到串口通讯,那么如何有效地接收数据呢?假如这段数据是不定长的有如何高效接收呢? 同学A:数据来了就会进入串口中断,在中断中读取数据就行了! 中断就是打断程序正常运行,怎么能保证高效 ...