Код
void initADC()
{
//Настройка портов. Такты уже разрешены на порт А. Тактирование альтернативных функций разрешено
GPIOA_CRL_bit.MODE0 = 0; // Analog mode
GPIOA_CRL_bit.CNF0 = 0; // Input mode
//Настройка АЦП
RCC_APB2ENR_bit.ADC1EN = 1; //Разрешаем тактирование АЦП
ADC1_CR1 = 0;
ADC1_CR2 = 0;
ADC1_JSQR_bit.JL = 0; //последовательно 1 преобразование
ADC1_JSQR_bit.JSQ1 = 0; // PA0/ADC0
ADC1_SMPR2_bit.SMP0 = 0x7;
ADC1_CR2_bit.JEXTSEL = 7; // ручной старт инжективной группы
ADC1_CR2_bit.ADON = 1; //Включаем АЦП
//каллибровка
ADC1_CR2_bit.RSTCAL = 1;
while(ADC1_CR2_bit.RSTCAL == 1);
ADC1_CR2_bit.CAL = 1;
while( ADC1_CR2_bit.CAL == 1 );
}
{
//Настройка портов. Такты уже разрешены на порт А. Тактирование альтернативных функций разрешено
GPIOA_CRL_bit.MODE0 = 0; // Analog mode
GPIOA_CRL_bit.CNF0 = 0; // Input mode
//Настройка АЦП
RCC_APB2ENR_bit.ADC1EN = 1; //Разрешаем тактирование АЦП
ADC1_CR1 = 0;
ADC1_CR2 = 0;
ADC1_JSQR_bit.JL = 0; //последовательно 1 преобразование
ADC1_JSQR_bit.JSQ1 = 0; // PA0/ADC0
ADC1_SMPR2_bit.SMP0 = 0x7;
ADC1_CR2_bit.JEXTSEL = 7; // ручной старт инжективной группы
ADC1_CR2_bit.ADON = 1; //Включаем АЦП
//каллибровка
ADC1_CR2_bit.RSTCAL = 1;
while(ADC1_CR2_bit.RSTCAL == 1);
ADC1_CR2_bit.CAL = 1;
while( ADC1_CR2_bit.CAL == 1 );
}
После инита в рабочем коде делаю ручной старт командой
ADC1_CR2_bit.JSWSTART = 1;
Конвертирования не происходит. ещё раз .... ещё.....

Опять наверно где-то скрытый битик забыл..... перерыл даташит - всё вроде правильно. Случайно сделал команду
ADC1_CR2_bit.JSWSTART = 0;
И О ЧУДО!!! Запустилось преобразование.... правда в регулярной группе и результат лёг в ADC1_DR. Ну хоть результат похож на правду. Сделал ход канём, добавил в инит
ADC1_CR1_bit.JAUTO = 1; //автостарт инжективоной группы, после регулярной
И получил то что хотел. Т.е. делаю старт регулярной группы путём записи 0 в JSWSTART, после регулярной запускается инжективная.
Почему так? Где-то я бит пропустил или камень попался неисправный? В ератах вроде нету такой баги.
ps smt32f100c8t6