Для STM32L151 с "injected channels" можно так:
CODE
void ADC_Config( void )
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
ADC_CommonInitTypeDef ADC_CommonInitStruct;
//+ Enable The HSI (16Mhz)
RCC_HSICmd(ENABLE);
//+ Check that HSI oscillator is ready
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
//+ Enable the GPIOB Clock
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
//+ Configure PB.0 PB.1(ADC Channel8 and 9) in analog mode
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* ADC1 Configuration ------------------------------------------------------*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
/* ADC1 DeInit */
ADC_DeInit(ADC1);
ADC_CommonInitStruct.ADC_Prescaler = ADC_Prescaler_Div4;
ADC_CommonInit(&ADC_CommonInitStruct);
/* ADC1 Configuration of channel8 and channel9 */
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfConversion = 2;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_InjectedSequencerLengthConfig(ADC1, 2);
//+ ADC1 Injected Channel Config
ADC_InjectedChannelConfig(ADC1, ADC_Channel_9, 1, ADC_SampleTime_24Cycles);
ADC_InjectedChannelConfig(ADC1, ADC_Channel_8, 2, ADC_SampleTime_24Cycles);
//+ Enables the ADC1 Power Down during Delay
ADC_PowerDownCmd(ADC1, ADC_PowerDown_Idle_Delay, ENABLE);
//+ Delay until the converted data has been read
ADC_DelaySelectionConfig(ADC1, ADC_DelayLength_None);
//+ Enable ADC1
ADC_Cmd(ADC1, ENABLE);
//+ Wait until the ADC1 is ready
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_ADONS) == RESET);
}
.....................
//запускаем преобразование "injected" каналов
while(ADC_GetSoftwareStartInjectedConvCmdStatus(ADC1) == SET);
ADC_SoftwareStartInjectedConv(ADC1);
//+ Wait until ADC Channel 8 end of conversion
while (ADC_GetFlagStatus(ADC1, ADC_FLAG_JEOC) == RESET);
adc_ch0 = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_1);
adc_ch1 = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_2);
.....................
Сообщение отредактировал spasbyspas - Jun 12 2012, 09:19
Причина редактирования: [codebox] для длинного кода!!!