Перейти к содержанию
    

STM32F103, запуск АЦП от таймера

Пытаюсь запустить АЦП (канал 0) от таймера 2. Не работает...

 

Код

// Инициализация АЦП
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
ADC1->CR2 |= ADC_CR2_ADON;
ADC1->CR2 |= ADC_CR2_CAL;
while ((ADC1->CR2 & ADC_CR2_CAL) != 0);
ADC1->CR1 |= ADC_CR1_EOCIE;
NVIC_EnableIRQ(ADC1_2_IRQn);
ADC1->CR2 |= ADC_CR2_EXTTRIG | ADC_CR2_EXTSEL_0 | ADC_CR2_EXTSEL_1;

...

// Инициализация таймера
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
TIM2->PSC = 32000 - 1;
TIM2->ARR = 199;
TIM2->CCMR1 |= TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1;
TIM2->CCR2 = TIM2->ARR;
TIM2->CR1 |= TIM_CR1_CEN;

 

Запуск АЦП в ручном режиме (через повторный ADC_CR2_ADON) работает. Если у таймера разрешить прерывание CC2IF — срабатывает когда надо. В чём ошибка?

 

Похоже, проблема в настройке события CC2 от таймера. АЦП прекрасно запускается от таймера 3 при такой инициализации:

RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
TIM3->PSC = 32000 - 1;
TIM3->ARR = 199;
TIM3->CR2 |= TIM_CR2_MMS_1;
TIM3->CR1 |= TIM_CR1_CEN;

Тогда как следует настраивать таймер 2?

 

Ну блиииин... Всё настроил, а включить забыл. Проблема решилась добавлением строчки

TIM2->CCER |= TIM_CCER_CC2E;

 

Надо пойти пообедать =)

Изменено пользователем Babadag

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пытаюсь запустить АЦП от Timer1_CC2 на STM32F103C8.

Все выходы таймера1 (7 штук) работают, сигнал идет исправно.

В ручную, по прерыванию таймера, АЦП запускается без нареканий по любому из событий, однако автоматика не работает. Хочется разобраться.

В даташите, для выбора источника внешнего запуска АЦП есть несколько вариантов (см. рис). Например, запуск от TIM1_ CC2 производится при EXTSEL = 001. EXTTRIG = 1.

В регистре Timer1 CR2 среди возможных событий генерации внешнего вызова TRGO можно так же выбрать OC2REF, MMS = 101. Однако запуска не происходит.

Пробовал запускать первым каналом таймера CC1, ситуация та же.

Правильно ли такая согласованная настройка EXTSEL и MMS?

Несколько странным кажется то, что если в вышеописаных условиях установить бит SWSTART, то произойдет обычное преобразование, даже при том, что EXTSEL отличен от 111.

Благодарю за совет.

2019-04-10_10-44-23.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надо было неделю промаяться, запостить и сразу найти ошибку... настройки таймера и АЦП все верные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какая волшебная тема - как только сюда напишешь о своей проблеме, она сразу решается! :)

Надо заложить в закаладки!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...