I want to read 4 ADC channels in continuous scan mode. I am using adc interrupt to read from adc data register. Here is my initialization :
hadc3.Instance = ADC3;
hadc3.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
hadc3.Init.Resolution = ADC_RESOLUTION_12B;
hadc3.Init.ScanConvMode = ENABLE;
hadc3.Init.ContinuousConvMode = ENABLE;
hadc3.Init.DiscontinuousConvMode = DISABLE;
hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc3.Init.NbrOfConversion = 4;
hadc3.Init.DMAContinuousRequests = DISABLE;
hadc3.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
I have set a breakpoint in the interrupt handler. As soon as I start debugging, the execution goes into the interrupt handler and the OVR bit is found to be set in the status register.
To proceed with the normal execution I have to re-trigger the ADC via this line of code:
void HAL_ADC_ErrorCallback(ADC_HandleTypeDef* hadc)
hadc->Instance->CR2 |= (uint32_t)ADC_CR2_SWSTART;
in the ErrorCallback function.
The readings are coming fine but I cannot understand why the overrun bit is set at every cycle of conversion.