news 2026/10/11 1:01:00

STM32CubeMx开发之路—4采用DMA方式收发数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32CubeMx开发之路—4采用DMA方式收发数据

STM32CubeMx开发之路—4采用DMA方式收发数据


运行环境

工具版本说明
STM32CubeMXV5.0.0建议相同
Keil5V5.1.5建议相同

简介

本例程主要讲解如何通过串口发送数据和重定向printf


STM32CubeMx基本配置

基础配置过程请参考 STM32CubeMx(Keil5)开发之路—配置第一个项目


STM32CubeMx USART1配置


  • 点击USART1进行设置
  • 模式选择Asynchronous异步传输
  • 可以看到右边自动出现了Tx和Rx
  • 可以自行设置波特率,停止位,校验位等参数

  • 选择DMA设置
  • 添加DMA
  • 添加DMA的Tx和Rx通道

  • 选择NVIC设置
  • 打开USART1全局中断
  • 随便设置一个优先级

代码修改


  • 在usart.c文件中添加如下代码,定义全局变量
uint8_tRx_Flag=0;uint16_tRx_Len=0;uint8_tRx_Buf[Rx_Max]={0};


  • 在usart.h文件中添加如下代码,声明全局变量
#defineRx_Max1024externuint8_tRx_Flag;externuint16_tRx_Len;externuint8_tRx_Buf[Rx_Max];


  • 在stm32f1xx_it.c文件中添加对usart.h的声明
  • 在stm32f1xx_it.c文件中添加如下代码,对中断的处理
uint32_ttemp;if((__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)!=RESET)){/*清除状态寄存器和串口数据寄存器*/__HAL_UART_CLEAR_IDLEFLAG(&huart1);/*失能DMA接收*/HAL_UART_DMAStop(&huart1);/*读取接收长度,总大小-剩余大小*/temp=huart1.hdmarx->Instance->CNDTR;Rx_Len=Rx_Max-temp;/*接收标志位置1*/Rx_Flag=1;/*使能接收DMA接收*/HAL_UART_Receive_DMA(&huart1,Rx_Buf,Rx_Max);}



  • 在main.c文件中添加如下代码
/*Enable DMA IRQ*/HAL_UART_Receive_DMA(&huart1,Rx_Buf,Rx_Max);__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);...if(Rx_Flag)// Receive flag{Rx_Flag=0;// clean flagHAL_UART_Transmit_DMA(&huart1,Rx_Buf,Rx_Len);}


  • 烧录代码后打开出口调试助手
  • 正确的话会看到如下输出


小结

DMA常用场合

  • 对接收和发送数据量比较大的时候,减轻CPU工作
  • 对嵌入式系统实时性要求比较高的时候建议使用

本节主要讲如何采用DMA的方式进行串口数据的接收和发送,使用DMA主要就是减轻CPU的工作,让CPU有更多的时间去处理其他的工作。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/11 1:00:17

搬冷冻货怎么防冻伤?冷链装卸防护用品与作业要求

搬冷冻货怎么防冻伤?冷链装卸防护用品与作业要求搬冷冻货不戴手套、长时间裸手接触,是会真冻伤的。冷库和冷冻货作业里,冻伤、粘皮、低温浸渍都不稀奇,防护用品和作业安排不到位,最后伤的是人。这篇讲防护用品怎么配、…

作者头像 李华
网站建设 2026/10/11 0:59:53

对话式 Linux 运维 Agent:大模型驱动与高危操作人工确认设计实战

我这人比较懒,尤其是碰上重复性的运维操作,能写脚本绝不动手。但脚本有个天生的短板:它只是个执行器,没有判断力。重启个服务、删个日志、改个配置,这些操作本身不难,难的是判断“现在能不能做”“做完之后…

作者头像 李华
网站建设 2026/10/11 0:43:35

PyTorch柑橘成熟度识别:从数据流水线到PyQt部署实战

简介:资源包围绕柑橘成熟度识别任务,提供基于PyTorch深度学习框架的卷积神经网络完整工程,适合图像分类初学者及农业智能化项目开发者参考。包内共一百二十个文件,以一百一十三张柑橘成熟度图片为核心,另含三个Python脚…

作者头像 李华
网站建设 2026/10/11 0:41:56

基于OpenCV的车牌识别停车场收费系统:从图像到账单的完整实现

简介:这份资源是面向计算机相关专业毕业设计学生与项目实战学习者的Python停车场收费系统源码,核心采用OpenCV实现车牌识别,将图像处理、车牌定位与计费管理整合为完整可运行项目。项目经导师指导并通过评审,获98分,源…

作者头像 李华
网站建设 2026/10/11 0:36:31

Python机器学习信用评估实战:从评分卡到风控模型上线

简介:这套资源基于 Python 机器学习实现个人信用评估,以阿里天池贷款违约预测比赛数据集为对象,该数据集包含超过 120 万条贷款记录和 47 列特征变量,其中 15 列为匿名脱敏字段;资源面向机器学习初学者、数据挖掘课程设…

作者头像 李华