Как определить, какая скорость передачи данных установлена для виртуального COM-порта?

Я хотел бы, чтобы мое программное обеспечение, работающее на Leonardo, вело себя по-разному в зависимости от скорости передачи данных USB Serial, установленной ПК. Например, я хочу сделать умный преобразователь USB в UART, который выполняет некоторую обработку передаваемых им данных. Было бы гораздо элегантнее установить скорость передачи данных UART на любое значение, запрашиваемое ПК на стороне USB, а не жестко кодировать значение.

Насколько мне известно, чип 32u4 используется в качестве преобразователя USB в UART на Mega, где он поддерживает разные скорости передачи данных, так что это должно быть осуществимо.

У меня также есть плата Teensy 3.2, так что если кто-нибудь знает, как определить скорость передачи данных на этой плате, мне тоже интересно.

, 👍1


1 ответ


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

6

Из исходного кода следует, что на платах на базе 32u4 Serial включает дополнительные методы для доступа к настройкам с USB-хоста:

см.: https://github.com/arduino/ArduinoCore-avr/blob/b7c607663fecc232e598f2c0acf419ceb0b7078c/cores/arduino/USBAPI.h#L129

Из USBAPI.h:

// Они возвращают настройки, указанные хостом USB для
// последовательный порт. Они на самом деле не используются, но предлагаются здесь
// в случае, если эскиз хочет действовать в соответствии с этими настройками.
uint32_t baud();
uint8_t stopbits();
uint8_t paritytype();
uint8_t numbits();
bool dtr();
bool rts();
,

Я попробовал. На Leonardo Serial.baud() срабатывает сразу после запуска последовательного порта, внутри setup. На Teensy Serial.baud(), похоже, возвращает 0 внутри setup, поэтому я жду внутри loop, пока не будет возвращено ненулевое значение., @Dmitry Grigoryev