void Read_ADC_All(void)
{
u8 Number,t;
u32 sum;
DMA_SetCurrDataCounter(DMA1_Channel1,Sample_Times*Channel_Num);
DMA_Cmd(DMA1_Channel1,ENABLE);
ADC_Cmd(ADC1, ENABLE);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(DMA_GetFlagStatus(DMA1_FLAG_TC1)!=SET);
DMA_ClearFlag(DMA1_FLAG_TC1);
DMA_Cmd(DMA1_Channel1,DISABLE);
ADC_SoftwareStartConvCmd(ADC1, DISABLE);
ADC_Cmd(ADC1, DISABLE);
for(Number = 0;Number < Channel_Num;Number++)
{
sum = 0;
for (t = 0;t < Sample_Times;t++)
{
sum += ADC_ConvertedValue[t][Number];
}
AD_After_Filter[Number]=sum/Sample_Times;
}
delay_ms(5);
}
故障原因猜测:1、虽然有ADC_SoftwareStartConvCmd(ADC1, DISABLE);//禁用选定的ADC软件启动转换。但是adc并没有失能,所以在继续采集数据。2、由于DMA传输数据需要消耗一定的时间,在传输最后一个数据时,adc由于是连续转换,继续采集了下一个通道的数据,然后才被停止,这才造成了错位
|