Easyelectronics.ru

Электроника для всех
Текущее время: 05 июн 2020, 15:53

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Прерывание таймера
СообщениеДобавлено: 04 апр 2020, 00:14 
Только пришел

Зарегистрирован: 04 апр 2020, 00:05
Сообщения: 22
Добрый день.
Подскажите неучу...
На Nucleo L152RE настраиваю Timer2 на внутреннее тактирование (32МГц) с предделителем и переполнением так, чтобы срабатывало раз в секунду (31999 и 999 соответственно).
На HAL_TIM_PeriodElapsedCallback вешаю подачу сигнала на PA0 (внешний светодиод через резистор).
В main без задержки зажигаю онбордный светодиод и запускаю таймер HAL_TIM_Base_Start_IT(&htim2).
Ожидаю, что переполнение таймера произойдет через секунду и светодиоды загорятся последовательно. Но нет - загораются одновременно.
Что я делаю не так?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прерывание таймера
СообщениеДобавлено: 04 апр 2020, 00:37 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 08 апр 2013, 13:16
Сообщения: 110
Там сначала надо сгенерировать событие переполнения, чтобы обновить данные, те что вы внесли. Если без HAL, то так:
Код:
TIM2->PSC = 32000 - 1;
TIM2->ARR = 1000 - 1;
TIM2->DIER &= ~TIM_DIER_UIE;
TIM2->EGR |= TIM_EGR_UG;
TIM2->SR &= ~TIM_SR_UIF;
TIM2->DIER |= TIM_DIER_UIE;
TIM2->CR1 |= TIM_CR1_CEN;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прерывание таймера
СообщениеДобавлено: 04 апр 2020, 00:43 
Только пришел

Зарегистрирован: 04 апр 2020, 00:05
Сообщения: 22
Я тут пошарился по инету и нашел англоязычный совет - перед запуском таймера сбрасывать флаг UIF. Заработало. А иначе с HAL никак не сделать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прерывание таймера
СообщениеДобавлено: 04 апр 2020, 00:50 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 08 апр 2013, 13:16
Сообщения: 110
без сброса нет, при событии обновления данные копируются во внутренние регистры (если установлен флаг ARPE, если снять, то ARR копируется сразу, но при первом запуске в регистре CNT не нуль, поэтому и срабатывает почти мгновенно)...Я при первом запуске всегда генерирую событие...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прерывание таймера
СообщениеДобавлено: 04 апр 2020, 12:54 
Старожил

Зарегистрирован: 06 июн 2018, 22:30
Сообщения: 520
Откуда: Киев
Не он срабатывает мгновенно потому как событие Update генерируется и при старте таймера. А в CNT после сброса там ноль.
И вообще вы его сами генерируете TIM2->EGR |= TIM_EGR_UG;


Последний раз редактировалось MasterElectric 04 апр 2020, 12:59, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прерывание таймера
СообщениеДобавлено: 04 апр 2020, 12:58 
Только пришел

Зарегистрирован: 04 апр 2020, 00:05
Сообщения: 22
Если бы оно генерировалось при старте, то очистка флага UIF ничего не дала бы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прерывание таймера
СообщениеДобавлено: 04 апр 2020, 13:01 
Старожил

Зарегистрирован: 06 июн 2018, 22:30
Сообщения: 520
Откуда: Киев
Ну правильно сгенерировал, обновились регистры, очистил флаг, потом включил. Так надо. На счет старта ошибся.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: Glebiys


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB