2015-04-16 12:25 PM
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 ?
2015-06-30 10:15 AM
Hi,
The problem usually occurs if you have not read the previous result before the next conversion completes. You can either change the value ofInit.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.