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.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; 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.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.