方法一
初始化dma时候,里面会先使能dma,然后打开相应的中断,然后结果会导致main函数中卡死
卡在箭头处,也就是打不开adc和dma
解决方案
全部注释,只留第一个配置dma的函数
11.16:
补充:同样的现象:程序卡死在HAL_ADC_Start_DMA这个函数里面,下面程序无法运行,但是数组里面一直会接收到数据。
出去上文提到的解决方法外,
还有解决方法2:
dma初始化一定要在adc初始化之前,否则死循环
解决方法3:
注意缓存的大小
内存的缓存区必须是16位的(具体原因不详,实测就是这样,如果改成32位的就是会死循环,原因不详)
cubmax配置图:
总结:
adc和dma一起用的时候,经常会遇到程序卡死的问题(笔者身边的人也经常遇到这类问题),以上三种解决方案一般能处理死循环的问题,如果有新的情况后续会再补充。
个人的想法:
综合上文三种解决方法可以得知,这类问题大多和dma有关,所以我猜测大概率是dma中断和adc中断冲突导致的,第一种解决方法是直接把dma中断注释了,第三种则是吧dma中断优先级调到最高。
前几天参加电赛的过程中用到adc和dma时候遇到这个问题,配置代码配置了很久,一直死循环,这几天翻博客时候发现以前遇到过这种问题,并且还整理了文章,而且我居然一点映像都没有,电赛那几天找到了后面两种解决方法,并且对这篇文章作出补充。