APM32F030中12 位精度的 ADC,共 18 个通道, 16 个外部通道和 2 个内部通道, 各通道 A/D转换模式有单次、连续和断续, ADC 转换结果可以左对齐或右对齐存储在 16 位数据寄存器中。stm32F030的程序可以用在APM32F030上。
	  因需要要采集PC0和PC1两个引脚的AD值,对应于ADC_CHANNEL_10和ADC_CHANNEL_11,再调试过程中发现单独采集一个通道的值都是好的,然而采集两个通道时两个通道的值每次都差不多,将一个引脚直接拉低,采集到的两个通道值都为0,显然这是不对的,在网上查看一下资料后,发现要在获取值的时要加入ADC->CHSEL = (uint32_t)ch;  //这个非常重要,没有这句无法正常获取多通道的AD值。在此记录一下 
	void ADCInit(void)
	{
	    GPIO_Config_T gpioConfig;
	    ADC_Config_T  adcConfig;
	    /** RCM Enable*/
	    RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOC);
	    RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_ADC1);
	    RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_SYSCFG);
	    /** GPIO Configuration */
	    gpioConfig.pin = GPIO_PIN_0;
	    gpioConfig.mode = GPIO_MODE_AN;
	    gpioConfig.pupd = GPIO_PUPD_NO;
	    GPIO_Config(GPIOC, &gpioConfig);
	    gpioConfig.pin = GPIO_PIN_1;
	    gpioConfig.mode = GPIO_MODE_AN;
	    gpioConfig.pupd = GPIO_PUPD_NO;
	    GPIO_Config(GPIOC, &gpioConfig); 
	    /** ADC Configuration */
	    ADC_Reset();
	    ADC_ConfigStructInit(&adcConfig);
	    /** Set resolution*/
	    adcConfig.resolution = ADC_RESOLUTION_12B;
	    /** Set dataAlign*/
	    adcConfig.dataAlign = ADC_DATA_ALIGN_RIGHT;
	    /** Set scanDir*/
	    adcConfig.scanDir = ADC_SCAN_DIR_UPWARD;
	    /** Set convMode continous*/
	    adcConfig.convMode   = ADC_CONVERSION_SINGLE;
	    /** Set extTrigConv*/
	//    adcConfig.extTrigConv  = ADC_EXT_TRIG_CONV_TRG0;
	    /** Set TrigEdge*/
	    adcConfig.extTrigEdge = ADC_EXT_TRIG_EDGE_NONE;
	    ADC_Config(&adcConfig);
	//    ADC_ConfigChannel(ADC_CHANNEL_10, ADC_SAMPLE_TIME_239_5);
	//        ADC_ConfigChannel(ADC_CHANNEL_11, ADC_SAMPLE_TIME_239_5);
	    /** Calibration*/
	    ADC_ReadCalibrationFactor();
	    /** Enable ADC*/
	    ADC_Enable();
	}
	//获取ADC通道的值
	//ch 通道值0-16
	//获取转换结果
	uint32_t Get_Adc(uint32_t ch)   
	{
	  uint32_t adc_index = 0;
	    unsigned char retry=0;
	  ADC_ConfigChannel(ch, ADC_SAMPLE_TIME_239_5); 
	    ADC->CHSEL = (uint32_t)ch;  //这个非常重要,没有这句无法正常获取多通道的AD值
	  while (!ADC_ReadStatusFlag(ADC_FLAG_ADRDY)){
	        retry++;
	        if(retry>200)return 0;
	    };
	   ADC_StartConversion();
	   retry = 0;
	   while(ADC_ReadStatusFlag(ADC_FLAG_CC) == RESET){
	         retry++;
	        if(retry>200)return 0;
	     };
	        /** Read ADC Conversion value*/
	   adc_index = ADC_ReadConversionValue();
	     ADC_StopConversion();
	   return adc_index;
	}
	再次提醒ADC->CHSEL = (uint32_t)ch;  //这个非常重要,没有这句无法正常获取多通道的AD值
 
    
 
   
   
   
  