最近在用STM32F405RG做工程,ADC的初始化如下:
/* ADC Common Init **********************************************************/
ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_1;
ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
ADC_CommonInit(&ADC_CommonInitStructure);
/* ADC1 Init ****************************************************************/
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfConversion = 1;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);
/* ADC1 regular channe configuration *************************************/
/* test configuration *************************************/
ADC_VBATCmd (ENABLE);
ADC_RegularChannelConfig(ADC1, ADC_Channel_18, 1, ADC_SampleTime_15Cycles);
ADC_DMACmd(ADC1, ENABLE);
ADC_Cmd(ADC1, ENABLE);
焦点在ADC_RegularChannelConfig(ADC1, ADC_Channel_18, 1, ADC_SampleTime_15Cycles);的ADC_SampleTime_15Cycles上。
电路板中VBAT引脚是直接接的VCC,也就是3.3V,示波器测量电源没有问题,纹波还相当小,只有10mV。
Reference Manual上如下描述:
我用的片子是F405,那么从理论上来说,采样回来的数据应该是1.65V,数值上也就是2048才对。
当设置为采样时间为15个ADC_clk时,连续用DMA采样4096个点如下图所示(其中APB2速度为84M,ADC_clk为21M):
而当设置为采样时间为3个ADC_clk时,连续用DMA采样4096个点如下图所示:
可以看到此时幅值明显不对,测量内部温度值时也碰到了一样的情况,将采样时间设置为3个ADC_clk则幅值明显下落。
不知道是什么原因,有没有大神可以解释一下?