程序如下,在keil仿真调试,连续执行时,能看到ADC的转化值,存在AD_Value里。可是单步调试时,为什么到 volta[i] =(float) AD_Value[i]/4095*3.3; 不应该i变化一次,就能看到AD_Value里的值变化一下吗?看不到,直到执行6次后,在执行完printf语句后才能看到AD_Value里值才变化啊?ADC的采集不是应该先采到数据到AD_Value里吗?不知道我讲的清楚不?求大神解释下。我觉得问题就是ADC采集和数据处理的时序到底是怎么样的,是ADC采完一个数据,DMA就传送一个数据,然后就能处理一个吗?
#define ADC1_DR_Address ((uint32_t)0x4001244C)
u16 AD_Value[6];
float volta[6];
u8 i;
int main()
{
SystemInit();
delay_init(72); //延时初始化
NVIC_Configuration();
uart_init(9600);
DMA_Config(DMA1_Channel1,(u32)ADC1_DR_Address,(u32)&AD_Value,6);//cndtr对应所开信道个数
Adc_Init();
DMA_Cmd(DMA1_Channel1, ENABLE); //启动DMA通道
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //软件启动AD转换
while(1)
{
for(i=0;i<6;i++) //循环6次转换AD值
{
volta[i] =(float) AD_Value[i]/4095*3.3;
}
printf("AD1=%d\n",AD_Value[0]); printf("\r\n volta1 = %f V \r\n",volta[0]);
printf("AD2=%d\n",AD_Value[1]); printf("\r\n volta2 = %f V \r\n",volta[1]);
printf("AD3=%d\n",AD_Value[2]); printf("\r\n volta3 = %f V \r\n",volta[2]);
printf("AD4=%d\n",AD_Value[3]); printf("\r\n volta4 = %f V \r\n",volta[3]);
printf("AD5=%d\n",AD_Value[4]); printf("\r\n volta5 = %f V \r\n",volta[4]);
printf("AD6=%d\n",AD_Value[5]); printf("\r\n volta6 = %f V \r\n",volta[5]);
delay_ms(500);
}
}
|