对于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并没有那么智能,有些细节还需要人为的进行一些调整。