在使用CUBE MX配置ADC DMA的时候,容易出现程序死在HAL_ADC_DMA_Start这个函数上,无法运行这句函数下面的函数,但是ADC接受的数组内的数据还是在不断地更新,找过网上很多方法后都无法解决问题,最后自己琢磨出来了方法,记录并分享一下
原因1:
Keil5的程序优化会将程序一些部分优化掉,所以我们需要将Keil5中的程序优化关掉
原因2:
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)adc_data,100);
函数最后的参数,转换数据的长度设置的太小。根据论坛上的说法,数据转换的长度设置太小且转换周期太快会导致程序一直死在DMA的回调函数内,故绝不可以转换几个通道转换数据的长度就设为几,要把这个值调的稍微大一点。
改完这两个配置之后就可以解决程序一直死在Start函数内的问题。