使用CubeMX配置STM32后DMA无法正常工作的原因和解决方法

本文介绍了在使用STM32的DMA功能时遇到的问题,即DMA初始化需要在ADC或USART初始化之前进行,否则可能导致数据传输故障。解决方法是在CubeMX的GeneratedFunctionCall中设置初始化顺序,但不同版本的CubeMX可能有不同的操作方式。在CubeMX6.3.0中可以直接设置,而在6.5.0版本中可能需要手动修改main.c文件。该文强调了CubeMX在某些细节上的不足,需要开发者注意初始化顺序的调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于ADC或USART串口等DMA不正常工作的情况,大多原因是DMA初始化需要在ADC或者USART初始化之前进行,否则DMA不能正常工作,进而无法传输或获取数据。

解决方法如下:

很多人发现这个问题后,会在main.c中人为交换位置,其实在CubeMX中的Generated Function Call可以进行设置,这样只要设置一次,就不用在生成时再次进行调整了。否则,在CubeMX中每次重新生成后,都需要重新在main.c再次对函数进行位置交换。

操作方法如下图所示: 

注:此功能在CubeMX6.3.0中操作成功。在在CubeMX6.5.0尝试中无法操作,需手动在main.c中修改。

这是针对于DMA不能够正常使用做出的一个设定,也不能算是bug,只是CubeMX并没有那么智能,有些细节还需要人为的进行一些调整。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a27405134

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值