初级会员

- 积分
- 124
- 金钱
- 124
- 注册时间
- 2020-9-1
- 在线时间
- 24 小时
|
5金钱
问题:目前想提高效率,想法是:将10次累加过程放入中断。也就是DMA每次转换结束触发一次中断,在中断中进行累加,需要触发10次!结果问题来了
1、程序一直在触发点与中断间循环,出不来,导致数组一直在累加;
2、我发现了一个异常的地方,程序在中断总是会运行到hdma->XferErrorCallback(hdma),意思是说,DMA转换哪里报了错。
过程思路如下:
小弟最近在用16路ADC+DMA采集数据的实验,简单过程:DMA将16路ADC采集的数据放在自定义数组M中,每来一组累加一次,一共进行十次取平均值。
- for(z=0;z<10;z++)
- {
- HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_ConvertedValue, 16);
- <b> for(x=0;x<16;x++)
- {
- ADC_ConvertedFValue[x]+=ADC_ConvertedValue[x];
- }</b>
- }
- for(i=0;i<16;i++)
- {
- ADC_ConvertedFFValue[m++]=ADC_ConvertedFValue[i]/10;
-
- ADC_ConvertedFValue[i]=0;
-
- if(m>=514)
- HAL_ADC_Stop_DMA(&hadc1);
- }
复制代码 一共四组这样程序,就不贴了。
目前想提高效率,想法是:将10次累加过程放入中断。也就是DMA每次转换结束触发一次中断,在中断中进行累加,需要触发10次!
结果问题来了
1、程序一直在触发点与中断间循环,出不来,导致数组一直在累加;
2、我发现了一个异常的地方,程序在中断总是会运行到hdma->XferErrorCallback(hdma),意思是说,DMA转换哪里报了错。
- if (hdma->XferErrorCallback != NULL)
- {
- /* Transfer error callback */
- hdma->XferErrorCallback(hdma);
- }
复制代码
相关代码如下:
- /*这些都是CubeMx自己生成的,我只是往里面加入*/
复制代码
|
|