2012-08-01 01:34 AM
uint16_t Read_OPTOLed_ADC1(void)
{ ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_71Cycles5); ADC_SoftwareStartConvCmd(ADC1, ENABLE); while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET); // Get the conversion value OptoLedArray = ADC_GetConversionValue(ADC1); // return ADC_GetConversionValue(ADC1);}uint16_t Read_TEMP_ADC1(void) { ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 1, ADC_SampleTime_71Cycles5); while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET); // Get the conversion value TempArray = ADC_GetConversionValue(ADC1); // return ADC_GetConversionValue(ADC1);}The ADC Configuration void ADC_Configuration (void){ ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC| RCC_APB2Periph_ADC1, ENABLE); /////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// /* Configure PC4 (ADC Channel 7) as analog input -------------------------*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure PA7 (ADC Channel 14) as analog input -------------------------*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOC, &GPIO_InitStructure); /* ADC1 configuration ------------------------------------------------------*/ ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = ENABLE; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 2; ADC_Init(ADC1, &ADC_InitStructure); /* Enable ADC1 */ ADC_Cmd(ADC1, ENABLE); /* Enable ADC1 reset calibaration register */ ADC_ResetCalibration(ADC1); /* Check the end of ADC1 reset calibration register */ while(ADC_GetResetCalibrationStatus(ADC1)); /* Start ADC1 calibaration */ ADC_StartCalibration(ADC1); /* Check the end of ADC1 calibration */ while(ADC_GetCalibrationStatus(ADC1)); /* Start ADC1 Software Conversion */ ADC_SoftwareStartConvCmd(ADC1, ENABLE); }PC.4 is ADC Channel 14 , PA.7 ADC Channel 7 ( Stm32 C-Eval )I want to see this channels' ADC Values but i see the same values at the same time.Do i mistake at the configuration or ReadADC Function ?2012-08-01 06:32 AM
The ADC conversion register holds only one value. Change the initialization to:
ADC_InitStructure.ADC_NbrOfChannel = 1; To convert two or more channels with one start conversion command, DMA is required. You are using two start conversions, which works also. Cheers, Hal2012-08-01 06:58 AM
How can i add DMA for this configuration without interrupt ?
2012-08-01 08:15 AM
Poll the DMA current data counter. When = 0, all channels are converted and in the assigned buffer.
See the Standard Peripheral Library example for ADC DMA to get started. Cheers, Hal