时钟96MHZ, 通道3进行AD转换,做测试.最简单处理方法,全部在一个函数中了
VOID ADC_Function_test(void) { ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE ); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE ); RCC_ADCCLKConfig(RCC_PCLK2_Div8); //ADC分频 最大14M 96/8=12M GPIO_InitStructure.GPIO_Pin =GPIO_Pin_3;//通道3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); // ADC_StructInit(&ADC_InitStructure); ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC1工作在独立模式 ADC_InitStructure.ADC_ScanConvMode = DISABLE; //单通道模式 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //单次转换模式 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigInjecConv_None; //转换启动由软件而不是外部启动 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC 数据右对齐 ADC_InitStructure.ADC_NbrOfChannel = 1; //顺序进行规则的通道数 ADC_Init(ADC1, &ADC_InitStructure); ADC_Cmd(ADC1, ENABLE); //使能ADC1 // ADC_BufferCmd(ADC1, DISABLE); //disable buffer ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)); // ADC_BufferCmd(ADC1, ENABLE); //enable buffer ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 1,ADC_SampleTime_239Cycles5); //采样时间为239.5个周期 ADC_SoftwareStartConvCmd(ADC1, ENABLE); //启动转换 while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)); //等待转换结束??????????死等待了 ADC_GetConversionValue(ADC1);//读取数据 return ; }
在while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)); //死等