Как работать с нетрадиционными скоростями передачи данных UART

Я безуспешно пытаюсь связаться с помощью Arduino Nano с пользовательским устройством на скорости передачи данных 800 кбит/с.

Код Arduino выглядит так:

void setup() {
  // Put your setup code here, to run once:
  Serial.begin(800000);
}

void loop() {
  // Put your main code here, to run repeatedly:
  delay(5000);
  Serial.println(0x2be1);
}

Когда я пытаюсь отладить его с помощью PuTTY, результат следующий:

Вывод PuTTY @ 800 кб/с

А когда я меняю скорость передачи данных на 400 кбит/с, результат такой (как и должно быть):

Вывод PuTTY @ 400 кб/с

Есть идеи?

, 👍5


1 ответ


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

13

Arduino Nano не может работать со скоростью 800 кб/с. Как вы можете видеть в исходнике code, длительность бита округляется до ближайшего кратного 8 циклов ЦП. В вашем случае округляется до 3 × 8 циклов ЦП, что обеспечивает скорость передачи данных 666,666 кб/с. Это на 16% медленнее, ошибка слишком большая для любого чтобы общение было возможным.

При 400 кбит/с ошибки округления нет, так что все работает нормально.

Изменить: Обратите внимание, что если вы создаете свои собственные barebone-системы Arduino, то либо 12,8 МГц, либо 19,2 МГц кристалл должен позволить вам получить именно эту скорость передачи данных. Но тогда millis(), delay() и т. д. будут отключены.

,