nickson.b.k 0 21 июля, 2021 Опубликовано 21 июля, 2021 · Жалоба Доброго времени! Изучаю adc на stm32. Пишу инициализацию опираясь на referense manual и его регистры Получил некоторую функцию инициализации. После отсутствия результата в регистре DR сравнил написанное со статьями из нэта. В принципе, у меня получилось также. Но вот всё равно не работает. Целю данного кода: Настроить АЦП на PC0 и произвести с него измерение. void Init_ADC (void){ /* * PC0 - ADC_IN10 - 12V */ /* * Изночально APB2 тактируется на 32МГц. Нужно понизить до приемлемой частоты */ RCC -> AHBENR |= RCC_AHBENR_GPIOCEN; // тиктирование порта С GPIOC -> MODER |= GPIO_MODER_MODER0_1 | GPIO_MODER_MODER0_0; // PC0 = 11: Analog mode RCC -> APB2ENR |= RCC_APB2ENR_ADC1EN; // тактирование АЦП // Предделитель ADC RCC -> CFGR |= RCC_CFGR_ADCPRE_1 | RCC_CFGR_ADCPRE_0; // 32/8=4MHz // SQR1_L = 0 - измерение только одной ячейки ADC1 -> SQR3 |= ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_1; // в первую ячейку будет производится измерение с 10 канала ADC1 -> CR2 |= ADC_CR2_ADON; // включение АЦП ADC1->CR2 |= ADC_CR2_SWSTART; // запуск АЦП while(!(ADC1->SR & ADC_SR_EOC)) ; // ожидание завершения преобразования } Отладчик зависает на ожидании флага окончания преобразования - флаг не выставляется Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 21 июля, 2021 Опубликовано 21 июля, 2021 · Жалоба А посмотреть примеры и код от гуру программирования из Индии религия не позволяет ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nickson.b.k 0 21 июля, 2021 Опубликовано 21 июля, 2021 · Жалоба 7 минут назад, x893 сказал: А посмотреть примеры и код от гуру программирования из Индии религия не позволяет ? а не умничать подсказать слабо? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 21 июля, 2021 Опубликовано 21 июля, 2021 · Жалоба 1 час назад, nickson.b.k сказал: ADC1->CR2 |= ADC_CR2_SWSTART; // запуск АЦП Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nickson.b.k 0 21 июля, 2021 Опубликовано 21 июля, 2021 · Жалоба 1 час назад, Сергей Борщ сказал: ПОМОГЛО!!! Большое спасибо за путь истинный))) По мимо выбора триггера, нужно было включить EXTTRIG. Без него не работало. Хотя это странно. Итог: void Init_ADC (void){ /* * PC0 - ADC_IN10 - 12V */ /* * Изночально APB2 тактируется на 32МГц. Нужно понизить до приемлемой частоты */ RCC -> AHBENR |= RCC_AHBENR_GPIOCEN; // тиктирование порта С GPIOC -> MODER |= GPIO_MODER_MODER0_1 | GPIO_MODER_MODER0_0; // PC0 = 11: Analog mode RCC -> APB2ENR |= RCC_APB2ENR_ADC1EN; // тактирование АЦП // Предделитель ADC RCC -> CFGR |= RCC_CFGR_ADCPRE_1 | RCC_CFGR_ADCPRE_0; // 32/8=4MHz ADC1 -> CR2 |= ADC_CR2_ADON; // включение АЦП // SQR1_L = 0 - измерение только одной ячейки ADC1 -> SQR3 |= ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_1; // в первую ячейку будет производится измерение с 10 канала ADC1 -> CR2 |= ADC_CR2_EXTTRIG; // включение преобразования по внешнему событию ADC1 -> CR2 |= ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0; // выбор источника триггера 111: SWSTART ADC1 -> CR2 |= ADC_CR2_SWSTART; // запуск АЦП while(!(ADC1->SR & ADC_SR_EOC)) ; // ожидание завершения преобразования } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться