Прерывания по таймеру

Нашел пример использования прерываний по таймеру для stm32 в ардуино, в нем указано максимальное время подсчёта таймера 59 секунд, можно ли увеличить данное значение? ( например 2 минуты)
Если setPeriod ставлю больше 59000000 происходит фигня и мигает каждые несколько секунд

volatile bool LEDOn13 = 0;

void setup()
{
  pinMode(LED_BUILTIN, OUTPUT); // PC13
  Timer3.pause(); // останавливаем таймер перед настройкой
  Timer3.setPeriod(59000000); // время в микросекундах (500мс)
  Timer3.attachInterrupt(TIMER_UPDATE_INTERRUPT, func_tim_3); // активируем прерывание
  Timer3.refresh(); // обнулить таймер 
  Timer3.resume(); // запускаем таймер
}

void loop() 
{}

void func_tim_3() // обработчик прерывания
{
  digitalWrite(LED_BUILTIN, (LEDOn13 = !LEDOn13));
}

Что мешает, например, отсчитать четыре раза по 30 секунд для получения 2 минут и выполнить действие?

1 лайк

я так понимаю примеры от сюда

почитать еще раз, внимательно и до конца!!

А толку? Максимальный период 16-битного таймера - порядка минуты. И увеличивать там уже некуда.

Другой вопрос - зачем для таких конских интервалов аппаратный таймер? Такие задержки делают на миллис

человек хотел таймерами, вместо одной строчки))
я просто подумал, что прочитав до конца, он поймет, что в прерывание одного таймера можно запустить другой.

Я хочу независимо от основного цикла (loop)запускать таймер, который при достижении 2х минут будет выполнять функцию, можете привести пример как это сделать?

А… Попробую

Извините мне мои фантазии, но обычно такие желания у участника бывают тогда, когда он не знает, как написать неблокирующий код в loop() .
Если это ваш случай - то гораздо полезнее вам будет освоить работу с миллис (без которой вы все равно ни одной серьезной программы не напишете)

Нет, у меня весь основной код в миллисах и многозадачности там много, решил просто попробовать

ну тогда проще всего сделать как посоветовали в первом же ответе - настроить таймер на 30сек и в прерывании отсчитать три таких интервала, потом выполнить действие.
Заводить под это два таймера, запускаемые последовательно… это как-то перебор. Разве что в образовательных целях.
Аппартные таймеры - ценный ресурс. их не так много, разбазаривать их на ерунду не надо :slight_smile:

правильнее поставить метку “решение” автору правильного ответа - @BOOM

1 лайк

таймер на 30 секунд = миллис на 30000

1 лайк

Это хороший совет. Вопрос - поможет ли?))

А кто мешает в вашей куче многозадач добавить таймер-задачу. Не ужели эта соломина(маленькая задачка) положит у вас верблюда(систему).

Есди слона есть не по частям, то можно подавиться. Это к вопросу о знаниях ТС

А если таймер каскадировать с тем что миллис держит то максимальный период увеличится часов до 5.

Да тема не очем, вы@бнутся хотели мега задержкой на таймере, да можно, но как правильно ребята сказали, нахрена? Есть более красивые решения.