STM32CubeMX的DMA传输的bug(串口DMA举例)

6 篇文章 11 订阅
本文介绍了在使用STMCubeMX配置STM32的DMA时遇到的一个常见问题。当先配置串口再添加DMA配置时,生成的代码中DMA初始化会位于串口初始化之后,导致DMA无法正常工作。解决方法是手动调整DMA初始化函数在串口初始化之前,以确保DMA时钟在配置时已经开启。这个问题对于使用STM32CubeMX的开发者来说是一个需要注意的细节。
摘要由CSDN通过智能技术生成

STMCubeMX

  STMCubeMX是ST为stm32系列mcu开发的图形化配置工具,通过它我们可以快速初始化芯片资源,确实可以为嵌入式软件工程师节省在底层配置上的时间精力,快速进入功能验证。但是我们在使用它的时候需要注意一个bug,防止掉进坑里影响我们宝贵的时间和开发节奏。

DMA

  DMA(Direct Memory Access),直接存储器访问,是一种广泛使用的数据传输方式,DMA控制器可自主在存储器和外部设备之间直接进行数据传送,大大节省处理器本身的芯片资源,高速通信时大大提高系统效率和稳定性。

STMCubeMX下uart的dma配置

推荐博文 ----STM32CubeMX教程之串口dma发送接收------

在这里插入图片描述

在上述教程中,串口或其他通讯总线和DMA一起配置的时候并不会出现问题

笔者生成的代码(dma和串口一起配置):

在这里插入图片描述
结果(正常通信):

在这里插入图片描述

BUG——开始踩坑

  在先配置串口或其他通讯总线并生成代码后,如果我们需要用到dma了,再次操作stm32cubemx工程配置dma将会产生此BUG:生成的代码dma初始化函数在通讯总线初始化后,导致dma无法使用。

第一次配置(无dma)

在这里插入图片描述
第二次配置(增加dma配置)

在这里插入图片描述
我们可以发现因为代码生成的先后机制,dma初始化在串口初始化后

测试结果:

在这里插入图片描述
无法正常通信

改正方式:只需将dma初始化函数放在串口初始化函数之前即可。

原因:

在这里插入图片描述
dma初始化函数在后时,前面串口初始化里进行dma相关配置时还未开dma时钟,所以配置无效。

注:笔者使用的stm32cubemx版本:

在这里插入图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值