cancel
Showing results for 
Search instead for 
Did you mean: 

adc multiple value without dma

Werner Bauer
Associate II
Posted on January 26, 2017 at 08:35

Hi all,

I try to read ADC values from the STM32f303 without success. With one channel everything is working fine but when I want to read the next channel it is not working any more. maybe I am doing something wrong with the GetConversionValue(ADC1) ? I want to save here up to eight values. Thanks for your input. Here is the code:

/* Configure the ADC clock */

RCC_ADCCLKConfig(RCC_ADC12PLLCLK_Div2);

/* Enable ADC1 clock */

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ADC12, ENABLE);

/* Setup SysTick Timer for 1 �sec interrupts */

if (SysTick_Config(SystemCoreClock / 10000))

{

/* Capture error */

while (1)

{}

}

/* ADC Channel configuration */

/* GPIOC Periph clock enable */

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);

/* Configure ADC Channel7 as analog input */

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(GPIOC, &GPIO_InitStructure);

ADC_StructInit(&ADC_InitStructure);

/* Calibration procedure */

ADC_VoltageRegulatorCmd(ADC1, ENABLE);

/* Insert delay equal to 10 �s */

// Delay(10);

ADC_SelectCalibrationMode(ADC1, ADC_CalibrationMode_Single);

ADC_StartCalibration(ADC1);

while(ADC_GetCalibrationStatus(ADC1) != RESET );

calibration_value = ADC_GetCalibrationValue(ADC1);

ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;

ADC_CommonInitStructure.ADC_Clock = ADC_Clock_AsynClkMode;

ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;

ADC_CommonInitStructure.ADC_DMAMode = ADC_DMAMode_OneShot;

ADC_CommonInitStructure.ADC_TwoSamplingDelay = 9;

ADC_CommonInit(ADC1, &ADC_CommonInitStructure);

ADC_InitStructure.ADC_ContinuousConvMode = ADC_ContinuousConvMode_Enable;

ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;

ADC_InitStructure.ADC_ExternalTrigConvEvent = ADC_ExternalTrigConvEvent_0;

ADC_InitStructure.ADC_ExternalTrigEventEdge = ADC_ExternalTrigEventEdge_None;

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

ADC_InitStructure.ADC_OverrunMode = ADC_OverrunMode_Disable;

ADC_InitStructure.ADC_AutoInjMode = ADC_AutoInjec_Disable;

ADC_InitStructure.ADC_NbrOfRegChannel = 2;

ADC_Init(ADC1, &ADC_InitStructure);

/* ADC1 regular channel6 configuration */

ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 1, ADC_SampleTime_19Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 2, ADC_SampleTime_19Cycles5);

/* Enable ADC1 */

ADC_Cmd(ADC1, ENABLE);

/* wait for ADRDY */

while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_RDY));

/* Start ADC1 Software Conversion */

ADC_StartConversion(ADC1);

/* Infinite loop */

while (1)

{

/* Test EOC flag */

while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);

/* Get ADC1 converted data */

ADC1ConvertedValue =ADC_GetConversionValue(ADC1);

/* Compute the voltage */

ADC1ConvertedVoltage = (ADC1ConvertedValue *3000)/0xFFF;

}

}

#adc-multiple-value-without-dma
1 REPLY 1
Oliver Beirne
Senior
Posted on January 26, 2017 at 11:50

Hello Werner

I have moved your question to the

https://community.st.com/community/stm32-community/stm32-forum?sr=search&searchId=1a954a8e-e56a-40bb-a948-054a770e06ad&searchIndex=0

‌ where someone should be able to assist you.

Thanks

Oli