BitFu 发表于 2016-2-20 23:20:29

STM32F0 adc时钟问题

复制一个从标准库内的示例测试后ADC正常工作,但我想搞清楚ADC时钟,
示例中,ADC内部14M时钟是关闭的(RCC->CR2最低位),但ADC选择的是内部14M时钟(RCC->CFGR3中);这种情况ADC为什么会工作呢?那工作的时钟究竟会是多少呢?

BitFu 发表于 2016-2-22 11:09:49

最糟糕的是下面的代码出来 的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:26:52

本帖最后由 五哥1 于 2018-6-4 20:28 编辑

RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //设置ADC分频因子6 72M/6=12M,ADC最大时间不能超过14M
页: [1]
查看完整版本: STM32F0 adc时钟问题