主函数如下
int main(void)
{ u8 i;
u16 t;
u32 temp =0;
u16 adcx;
u8 table[6];
u8 *p = table;
Stm32_Clock_Init(9);
delay_init(72);
USART_Initaize(72,9600);
LED_Init();
LCD_Init();
  OINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(60,130,"ADC_CH0_VAL:");
Adc_Init(); //内部包含了MYDMA_Config(……);函数
while(1){
//一下三行调试时用,方便观测ADC是否开启
u16 adc;
adc = Get_Adc(ADC_CH0); //规则序列中的第一个转换 // !!!!!这里采集来的值在用DMA传输前后不一致,大概小了400左右
LCD_ShowNum(156,130,adc,4,16);
delay_ms(10);
if(DMA1->ISR&(1<<1)) //传输完成了
{
LED1 = !LED1;//方便调试而已
for(t=0;t<10;t++)
{ LCD_ShowNum(156,100,Adc_Buf[t],4,16);
temp = temp + Adc_Buf[t];
}
temp = temp /10; //取平均值
LCD_ShowNum(156,155,temp,4,16);
adcx=temp*330/4096;
table[0]= adcx / 100 + 0x30;
table[1]= '.';
table[2]= adcx % 100/10 + 0x30;
table[3]= adcx %10 + 0x30;
table[4]= 'V';
table[5] = '\0';
Uart1_PutString(p,5);
Uart1_PutString("\r\n",2);
temp =0;
DMA1->IFCR|=1<<1;
MYDMA_Enable(DMA1_Channel1); //这句不能少,因为
//每次传输完成都得再使能DMA传输
}
//以下程序也是方便调试而已
i++;
delay_ms(10);
if(i==20)
{
LED0=!LED0;//提示系统正在运行
i=0;
}
}
}
请各位大虾帮我解答下,为什么我的ADC采集在开启DMA传输前后采集来的值相差400左右,如:在注释掉DMA传输后,采集来的值是2000多,取消注释后采集的值就变成1000多了(大概在
1500到1900跳动)?请问下是问什么啊? |