cancel
Showing results for 
Search instead for 
Did you mean: 

STM32F4 discovery ADC with CubeMX F4

system_of_a_68
Associate
Posted on April 16, 2015 at 21:25

Dear,

I start a project with CubeMX for the first time and I need to use ADC. I configure ADC1 IN1 to do this. I use HAL_ADC_START_IT to launch the continuous conversion and have an interrupt when the conversion is finish. I get in HAL_ADC_ConvCpltCallback only one time and after I have HAL_ADC_ERROR_OVR in ADC state. ADC initialization :

void MX_ADC1_Init(void)
{
ADC_ChannelConfTypeDef sConfig;
/**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) 
*/
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV8;
hadc1.Init.Resolution = ADC_RESOLUTION12b;
hadc1.Init.ScanConvMode = DISABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1;
hadc1.Init.DMAContinuousRequests = DISABLE;
hadc1.Init.EOCSelection = EOC_SINGLE_CONV;
HAL_ADC_Init(&hadc1);
/**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. 
*/
sConfig.Channel = ADC_CHANNEL_1;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}

Is it an error of CubeMX or STM32F4 (didn't see something in errata sheet) or I did a mistake ?
1 REPLY 1
Noppe.Jack
Senior
Posted on June 30, 2015 at 19:15

Hi, 

The problem usually occurs if you have not read the previous result before the next conversion completes.  You can either change the value of

Init.EOCSelection 

(to ignore overrun detection) or if you read the result every time the HAL_ADC_ConvCpltCallback fires then it should also avoid the overrun event.

Hope this helps.