Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/47: Рейтинг темы: голосов - 47, средняя оценка - 4.51
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 76

динамическое изменение периода срабатывания прерывания от таймера STM32l4xx

27.05.2021, 09:28. Показов 10413. Ответов 5

Студворк — интернет-сервис помощи студентам
Подскажите как правильно динамически менять период срабатывания прерывания от таймера? Я использую макрос
Code
1
__HAL_TIM_SET_AUTORELOAD(&htim3, 7000)
Но при его использовании программа начинает глючить
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.05.2021, 09:28
Ответы с готовыми решениями:

Изменение периода срабатывания таймера Timer из JSpinner
Имеется класс в котором определен TestTimer extends TimerTask и метод boost в котором имеется timer.schedule(new TestTimer(), 0,...

Изменение периода таймера
Привет всем! Есть код: class StartRefreshTask extends TimerTask { public void run() { ... }

Нет срабатывания прерывания
Доброго времени суток Бодаюсь с 8-ой мегой. Проблема в том, что ни в какую не хочет срабатывать прерывание по переполнению таймера. ...

5
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
27.05.2021, 12:17
Цитата Сообщение от csm7 Посмотреть сообщение
Подскажите как правильно динамически менять период срабатывания прерывания от таймера?
Вы должны учитывать, что при уменьшении "периода срабатывания", если счетчик таймера находится выше порога нового срабатывания - то таймер будет бежать дальше, до переполнения и начала нового периода. Соответственно, нужно сделать так, чтобы в этом случае счетчик таймера предустанавливался внутри нового периода, в соответствии с требуемым поведением. Обычно его выставляют в конце нового периода, чтобы сработало последнее прерывание, либо сбрасывают в ноль, чтобы новый период сработал по-новому. Это зависит от задачи
0
 Аватар для Aveal
6 / 4 / 2
Регистрация: 02.06.2020
Сообщений: 18
27.05.2021, 21:27
Присоединяюсь к вышесказанному, проблема 99% в этом, то есть в месте вызова __HAL_TIM_SET_AUTORELOAD(). Стандартная практика - изменять период в прерывании по переполнению, то есть в тот момент, когда значение счетчика равно 0. Это исключает проблему, о которой написал Voland_.

C
1
2
3
4
5
6
7
8
9
void TIM4_IRQHandler()
{
  if (TIM4->SR & TIM_SR_UIF)
  {
    TIM4->SR &= ~TIM_SR_UIF;
    TIM4->CNT = 0;
    TIM4->ARR = newValue;
  }
}
Соответственно, при использовании HAL работа с регистрами может заменяться на соответствующие функции/макросы.
0
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 76
28.05.2021, 09:11  [ТС]
Проблема немного в другом. В начальный момент инициализируется таймер и останавливается. В какой-то момент его необходимо запустить предварительно установив период срабатывания. Происходить срабатывание, которое обрабатывается в CallBack функции и таймер опять останавливается.
Сбоить начинает именно после того как меняется значение периода таймера (возможно неправильно останавливается таймер).

Добавлено через 23 минуты
остановка таймера
HAL_TIM_BASE_Stop_IT(&htim3);
старт
HAL_TIM_BASE_Start_IT(&htim3);
установка периода
__HAL_TIM_SET_AUTORELOAD(&htim3, 5000);
0
 Аватар для Aveal
6 / 4 / 2
Регистрация: 02.06.2020
Сообщений: 18
28.05.2021, 09:13
А можете код полный показать? Или проект выслать?
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
28.05.2021, 18:45
Цитата Сообщение от csm7 Посмотреть сообщение
Сбоить начинает именно после того как меняется значение периода таймера
тут еще одно есть замечание - нужно удостовериться, что изменение настроек таймера, противоречащих либо просто влияющий друг на друга, должно происходить на некотором "временнОм расстоянии" друг от друга. Все потому что периферия (в данном случае - таймер) могут работать на сниженной по сравнению с ЦП частоте. В итоге обращение к регистрам может искажаться. Для тестов навставляйте NOP'ов между настройками таймера.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.05.2021, 18:45
Помогаю со студенческими работами здесь

Время до срабатывания таймера
Доброго вам! Можно ли узнать сколько осталось до срабатывания таймера? Вариант запомнить время при последнем срабатывании и в данный...

Цикл срабатывания таймера
Здравствуйте. У меня есть условие if shape2.left:= 500 then timer1.enabled:= true; Данное условие задано в Таймере2 для включения таймера1,...

Время до срабатывания таймера
Есть таймер, как можно в label вывести сколько осталось до следующего тика?

Время срабатывания таймера
Добрый день, возникла необходимость в помощи относительно таймеров stm32f746. Есть 3 таймера, TIM4 работает циклично и запускает в...

Вывод времени до срабатывания таймера
Здравствуйте. У меня в приложении есть два таймера: m_timerAutoRefresh = new System.Windows.Forms.Timer(); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru