В процессе отладки программы вдруг стал зависать АЦП во время его инициализации. Оказалось, он не выходит из калибровки:
Код
ADC1->CR2 |= ADC_CR2_RSTCAL; // reset calibration
while(ADC1->CR2 & ADC_CR2_RSTCAL) // wait until reset finished
{}
Выяснилось, что если перед ним поставить два или более NOP-ов, то он начинает работать. В даташите нашел следующий абзац:
Цитата
Before starting a calibration the ADC must have been in power-off state (ADON bit = ‘0’) for
at least two ADC clock cycles.
Как это понимать? Калибровка производится при включении питания, поэтому он находится в power-off state гораздо больше, чем два clock cycles.
Может наоборот, после
включения ADON должно пройти не менее двух циклов? Тогда это объясняет помощь NOP-ов.