STM32F0 adc时钟问题
复制一个从标准库内的示例测试后ADC正常工作,但我想搞清楚ADC时钟,示例中,ADC内部14M时钟是关闭的(RCC->CR2最低位),但ADC选择的是内部14M时钟(RCC->CFGR3中);这种情况ADC为什么会工作呢?那工作的时钟究竟会是多少呢? 最糟糕的是下面的代码出来 的ADC时钟竟然是14mhZ,我本以为是48/4=12M呢
void AdcConfig(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/* ADC1 Periph clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
/* Configure ADC Channel11 as analog input */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* ADCs DeInit */
ADC_DeInit(ADC1);
//¸´Î»ÄÚ²¿14MʱÖÓ·¢ÉúÆ÷
//RCC->CR2 &= (uint32_t)0xFFFFFFFE;
//ADCʱÖÓΪPCLK/412MHz
RCC_ADCCLKConfig(RCC_ADCCLK_PCLK_Div4);
//Initialize ADC structure
ADC_StructInit(&ADC_InitStructure);
/* Configure the ADC1 in continuous mode with a resolution equal to 12 bits*/
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
ADC_Init(ADC1, &ADC_InitStructure);
/* Convert the ADC1 Channel with 239.5 Cycles as sampling time */
// ADC_ChannelConfig(ADC1, ADC_Channel_3 , ADC_SampleTime_7_5Cycles);
ADC_ChannelConfig(ADC1, ADC_Channel_4 , ADC_SampleTime_239_5Cycles);
/* ADC Calibration */
ADC_GetCalibrationFactor(ADC1);
/* Enable the ADC peripheral */
ADC_Cmd(ADC1, ENABLE);
/* Wait the ADRDY flag */
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY));
/* ADC1 regular Software Start Conv */
ADC_StartOfConversion(ADC1);
}
本帖最后由 五哥1 于 2018-6-4 20:28 编辑
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //设置ADC分频因子6 72M/6=12M,ADC最大时间不能超过14M
页:
[1]