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

6 篇文章 11 订阅

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版本:

在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值