2018-06-27 12:27 AM
STM32F051 ADC sample 5 channels with interrupt.
I'm trying to sample 5 channels using an interrupt. (I'll get to DMA later:0))
If I set the sample time to ('ADC_SAMPLETIME_41CYCLES_5') or longer then the code works as expected.
Every interrupt I check the ('ADC_FLAG_EOC') flag , if set , store the adc result in an array and increment the array index. After 5 conversions the ('ADC_FLAG_EOS') flag is also set. Then reset the array index and process the data in the array.
If I set the sample time to less than the above , the ('ADC_FLAG_EOS') flag is set after only 3 conversions!!
If I set the sample time to ('ADC_SAMPLETIME_7CYCLES_5') , the ADC interrupt never fires.
What could be going on here. I understand that having a small sample time could affect the accuracy of the result , but why is it changing the behavior of the system?
I can post the code if required , but maybe someone has a quick answer
:)
Cheers
Rob
2018-06-27 03:38 AM
Some info to add to the question.
If I make the ADC clock ('ADC_CLOCK_SYNC_PCLK_DIV4') , then I can set the sample time to a minimum of
('ADC_SAMPLETIME_41CYCLES_5').
If the ADC clock is set to
('
ADC_CLOCK_SYNC_PCLK_DIV2')
, then the minimum sample time is ('ADC_SAMPLETIME_239CYCLES_5').
If ADC clock is set to 14Mhz RC ('ADC_CLOCK_ASYNC_DIV1') , then the minimum sample time is
('
ADC_SAMPLETIME_239CYCLES_5').
Any sample time shorter than these values and the ADC stops working correctly or at all.
It looks like some sort of timing issue , but I can't figure out what it could be. ADC is only triggered (by software)
every 10mS.