[STM32]STM32芯片DMA+ADC无法连续转运BUG

在制作电压示波器的过程中,确实遇到了一些问题,就比如说STM32系列芯片,DMA+ADC会出现BUG,这种情况下,代码是没有问题的,但是因为是芯片的BUG,所以排查起来较为困难。

首先,我这个BUG是DMA无法连续转运,但是代码是开启连续转运的,排查很多遍代码,到后面把中断的所有标志位都清空,依旧无法连续转运,但是在外网论坛上,也有一个老哥遇到了相似的问题,很明确的指出了是ADC和DMA在特定条件下,会出现BUG,即ADC不放手DMA,导致无法连续转运,解决的办法也很简单,在转运结束后手动放手一下:

// DMA 传输完成后,禁用 ADC 的 DMA 请求
ADC_DMACmd(ADC1, DISABLE);
// 处理完数据后,重新启用 ADC 的 DMA 请求
 ADC_DMACmd(ADC1, ENABLE);

至此,困扰了一天的BUG就解决了,希望能够帮助到大家 : )