Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32f4 Basic timer?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
TolikG
Простейшая задача: при помощи таймера отсчитать задержку N микросекунд и выставить прерывание. Пол дня чтения мануала и гугля не дали результата. Все найденные примеры работают в цикле (проверил). Попытался запускать таймер однократно, а в обработчике прерывания - останавливать. После этого записываю новое значение задержки в прескаллер и снова запускаю таймер. Результат - желаемая задержка происходит не в текущем цикле таймера, а только в следующем. Мануал гласит, что регистры обновляются по событию переполнения таймера. Подскажите решение.
Genadi Zawidowski
Совет - сперва включить таймер, поставить значение для срабатывания, настроить прескалер, а потом разрешить счёт таймеру.
AHTOXA
Цитата(TolikG @ Nov 5 2014, 17:33) *
Мануал гласит, что регистры обновляются по событию переполнения таймера. Подскажите решение.

Сгенерировать событие переполнения таймера вручную:
Код
TIM2->EGR |= TIM_EGR_UG;
TolikG
Цитата(AHTOXA @ Nov 5 2014, 16:33) *
Сгенерировать событие переполнения таймера вручную:
Код
TIM2->EGR |= TIM_EGR_UG;

Так пробовал, но при этом генерируется прерывание. Пришлось запретить прерывание, обновить регистры, очистить регистр статуса, разрешить прерывание... Криво как то, но заработало. Задержка при этом увеличилась по сравнению с циклическим примером
AHTOXA
Тогда сделайте иначе. Прескалер и ARR не трогайте, пусть таймер молотит постоянно по полному кругу, а интервал засекайте модулем сравнения:
Код
TIM2->CCR2 = TIM2->CNT + delay_value
;
Прерывание, соответственно, ловите от модуля сравнения.
domowoj
У таймеров есть режимы предварительной записи,

// TIM2->CR1 |= TIM_CR1_ARPE;//Включен режим предварительной записи
//регистра автоперезагрузки
// TIM2->CCMR1 |= TIM_CCMR1_OC2PE;//Включен режим предварительной
//загрузки регистра сравнения

так вот выключите предварительную запись.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.