void ADC1_Config(void) { ADC_InitTypeDef ADC_InitStruct; GPIO_InitTypeDef GPIO_InitStruct; /* Enable GPIOA clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);//使能GPIOA時鐘 /* ADC1 Periph clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);//使能ADC1時鐘 /* Configure PA.0 as analog input */ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AN; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL ; GPIO_Init(GPIOA, &GPIO_InitStruct); //設置PA0爲模擬輸入,PA0對應的是通道0 ADC總共19個通道,16個外部通道,一個溫度,一個電壓,還有一個本身內部的Vbat通道; /* ADC1 DeInit */ ADC_DeInit(ADC1); /* Initialize ADC structure */ ADC_StructInit(&ADC_InitStruct); /* Configure the ADC1 in continous mode withe a resolutuion equal to 12 bits */ ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b; //12位的分辨率 ADC_InitStruct.ADC_ContinuousConvMode = ENABLE; //循環採樣,意思就是在整個程序能夠被進行屢次轉換,單次轉換的話整個程序生命週期只能被觸發一次 ADC_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;軟件觸發 ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right; 右對齊 ADC_InitStruct.ADC_ScanDirection = ADC_ScanDirection_Upward; ADC_Init(ADC1, &ADC_InitStruct); ADC_ChannelConfig(ADC1, ADC_Channel_0, ADC_SampleTime_55_5Cycles); 設置採樣通道,必定要把通道號和引腳的串口號對應起來 /* ADC Calibration */ ADC_GetCalibrationFactor(ADC1); //adc校準 ADC_Cmd(ADC1, ENABLE); 使能adc /* Wait the ADCEN falg */ while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN)); /* ADC1 regular Software Start Conv */ ADC_StartOfConversion(ADC1); 開始ADC轉換 } ADCData[Num]=ADC_GetConversionValue(ADC1) 在實際程序中能夠用這個函數進行採樣