библиотека таймера на Arduino DUE

Я пытаюсь вызвать подпрограмму прерывания (назовем ее handler()) каждую секунду на своем Arduino DUE. Я думал, что самый простой способ сделать это — использовать эту библиотеку но кажется, что я не знаю, как им пользоваться...

results

мой код

, 👍0

Обсуждение

Я думаю, вы имеете в виду start(1000000)., @Edgar Bonet

да........... это неловко ахахах Есть ли у вас предположения, почему не работает start(1000) ? Serial.print слишком длинный для выполнения?, @Julie96

Последовательная печать в ISR не рекомендуется. Установите флаг в ISR и вместо этого опрашивайте в цикле()., @Mikael Patel


1 ответ


Лучший ответ:

1

Вы пытаетесь напечатать 6 символов («test\r\n»), т.е. 60 бит. включая стартовый и стоповый биты, 1000 раз в секунду. Это требует скорость передачи данных не менее 60 кбит/с, однако последовательный порт настроен всего на 9,6 кбит/с. Что-то должно дать...

Как написал в комментарии Микаэль Патель, вообще не рекомендуется Serial.print() из ISR. Хотя это должно работать, т.к. до тех пор, пока вы не заполните выходной буфер Serial. Проблема в том, что ваш код заполняет буфер, поскольку он записывает в него быстрее, чем UART может его очистить. Как только буфер заполнится, программа неисправность.

,

Спасибо ! теперь обязательно воспользуюсь флагом, @Julie96