Есть ли какой-нибудь код, который я могу использовать, чтобы узнать, на какой скорости работает выбранный последовательный порт?
serial
arduino-mega
Хайден Тринг
источник
источник
Ответы:
Существует не верхний уровень, простой в использовании способ. Сожалею. Вероятно, проще просто сохранить выбранную скорость передачи в переменной при настройке последовательного порта.
В любом случае, то, что вы можете попытаться сделать для аппаратных UART на основе AVR, - это отмена того, что
Serial.begin
нужно для установки определенной скорости передачи, но это немного болезненно. Это код для установки скорости передачи:Вы можете найти результаты этого, прочитав правильные регистры UCSRA, UBRRH и UBRRL. На uno это правильные имена регистров, на мега - UCSR0A, UBRR0H, UBRR0L для Serial, UCRS1A ... для serial1 и так далее. Не-AVR доски (и
Serial
на Леонардо) будет совершенно другой.Для этих трех регистров на аппаратном последовательном порту AVR будет определенное состояние для конкретной платы (и частоты этой платы) на каждой скорости передачи данных. Вы можете попытаться составить уравнение, чтобы получить исходную скорость передачи, но я рекомендую просто сравнивать прямые значения с поиском некоторого вида, потому что целочисленные ошибки арифметического округления сделают это большим беспорядком.
Например, на моем мега UBBR0H, UBBR0L и UCSR0A равны 0, 207, 2 при 9600 бод, но они равны 0, 51, 2 при 38400 бод и 0, 16, 0 при 57600 бод.
источник