STM32串口DMA收发数据详解 | 高效传输与实战代码
创作时间:
作者:
@小白创作中心
STM32串口DMA收发数据详解 | 高效传输与实战代码
引用
CSDN
1.
https://blog.csdn.net/weixin_46716828/article/details/145592824
串口通信是STM32开发中最常用的功能之一,而DMA(直接存储器访问)技术能显著提升数据传输效率,减少CPU占用。本文从原理到实战,详细讲解如何配置STM32的串口DMA收发功能,并提供可直接复用的代码和避坑指南。
为什么需要DMA?
在传统的串口中断收发模式下,每个字节的传输都需要CPU介入,导致资源浪费和响应延迟。例如:
- 发送1KB数据需触发1024次发送中断,占用大量CPU时间。
- 高频率传感器数据采集时,可能因中断堆积导致数据丢失。
DMA的核心优势:
- 零CPU干预:数据直接在内存与外设间传输,释放CPU处理其他任务。
- 支持连续传输:单次配置即可完成多字节收发,适合大数据量场景(如图像传输、高速通信)。
硬件与开发环境
- 硬件平台:STM32系列(以STM32H750为例)。
- 开发工具:STM32CubeMX + STM32CubeIDE。
- 外设配置:USART1(PA9-TX, PA10-RX),DMA1 Stream3(发送),DMA1 Stream2(接收)。
CubeMX配置步骤
- 开启串口USART1
- 模式:Asynchronous(异步通信)。
- 参数:波特率115200,8位数据,无校验,1停止位。
- 配置DMA接收通道
- Direction: Peripheral To Memory(外设到内存)。
- Priority: low(低优先级)。
- Mode: Normal(单次传输)或Circular(循环传输,适合持续接收)。
- 配置DMA发送通道
- Direction: Memory To Peripheral(内存到外设)。
- 生成代码:生成STM32CubeIDE工程并打开。
代码实现与解析
DMA接收数据
//主函数初始化代码 HAL_UART_Receive_DMA(&huart1, Receive_data, sizeof(Receive_data)); __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); //使能空闲中断 //串口中断函数代码 void USART1_IRQHandler(void) { if (__HAL_UART_GET_IT( &huart1, UART_IT_IDLE ) != RESET) //判断是否是空闲中断 { __HAL_UART_CLEAR_IDLEFLAG(&huart1); //清除空闲中断标志 HAL_UART_AbortReceive(&huart1); //停止DMA Data_len = sizeof(Receive_data) - __HAL_DMA_GET_COUNTER(&hdma_usart1_rx); //接收了多长的数据 Data_flag = 1; //接收中断标志位 HAL_UART_Receive_DMA(&huart1,Receive_data,sizeof(Receive_data)); //使能接收 } HAL_UART_IRQHandler(&huart1); }
DMA发送数据
//主函数循环中 if (Data_flag) { //判断DMA是否接收完成 HAL_UART_Transmit_DMA(&huart1, Receive_data, Data_len); //DMA发送数据 Data_flag = 0; //标志位置0 }
测试结果
关键问题与解决方案
- DMA传输不触发
- 检查点:
- DMA通道与流是否与CubeMX配置一致(如USART1_TX对应DMA1 Stream5)。
- 是否调用
HAL_UART_Transmit_DMA()
前启用DMA时钟。
- 数据接收不完整
- 优化方案:
- 启用双缓冲区机制:交替切换接收缓冲区,防止数据覆盖。
- DMA与中断冲突
- 优先级设置:
- 在NVIC中为DMA和串口中断分配合理优先级(推荐DMA > 串口)。
应用场景
- 高速数据采集:通过DMA接收多通道ADC数据(如振动传感器波形)。
- 无线通信模块:ESP8266/蓝牙模组的长数据包透传。
- 工业协议解析:Modbus-RTU协议中高效处理多寄存器读写。
总结
DMA是STM32高性能开发的必备技能,合理使用可大幅提升系统效率。本文代码已通过实测,可直接使用。
热门推荐
发育迟缓是什么?儿童为什么会发育迟缓?
牛蒡可以和什么一起泡茶
宝马雕车香满路。
走进华理实验室,体验“全流程自适应生成式脑机接口系统”
俄罗斯洗车为何违法:法律规定与社会影响
肺癌晚期临终前的种种征兆
为什么Word会因为版本不同而出现显示差异,而PDF不会
OOTD是什么意思?从Ins到抖音的流行穿搭标签
从施暴者到受害者:未成年教育中的校园霸凌问题解决之道
道家浩然正气十六字诀
美的中央空调面板锁定怎么解锁
德甲球员身价更新:维尔茨1.3亿欧领跑,拜仁5人勒沃库森4人入选最贵阵容
我国碳酸锶行业分析:产能集中度较高 《目录》印发或将改变供给格局
金翅大鹏鸟的传说
学八字的出路,学八字的人对自身有影响吗
当一杯孤独症青年的“白切鸡咖啡”走红之后
核桃油是否能降血脂,如何食用
短视频脚本创作指南:四种类型脚本撰写技巧详解
如何分析购买基金出现亏损的原因?这些原因对投资策略有何启示?
从“好房子”到“好生活” 长租行业重塑新时代居住价值
衣柜格局设计:打造高效收纳与美观空间
汉章帝的得与失
青枣:去火还是上火?吃对才是硬道理!
显卡一线和二线有什么区别 看完就懂了!
伤官合杀是什么意思
基本面分析深化:如何深入分析公司基本面
王者荣耀S35赛季:无赖流刘禅,三盾合一抗伤三万+,站着不动你都没办法
如何理解并应对市场中的恶意做空行为
基于云边端协同的实时智能交通控制系统
车贷合同漏洞的法律分析及防范策略