Как работать с нетрадиционными скоростями передачи данных 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, результат следующий:
А когда я меняю скорость передачи данных на 400 кбит/с, результат такой (как и должно быть):
Есть идеи?
@user28282, 👍5
1 ответ
Лучший ответ:
Arduino Nano не может работать со скоростью 800 кб/с. Как вы можете видеть в исходнике code, длительность бита округляется до ближайшего кратного 8 циклов ЦП. В вашем случае округляется до 3 × 8 циклов ЦП, что обеспечивает скорость передачи данных 666,666 кб/с. Это на 16% медленнее, ошибка слишком большая для любого чтобы общение было возможным.
При 400 кбит/с ошибки округления нет, так что все работает нормально.
Изменить: Обратите внимание, что если вы создаете свои собственные barebone-системы
Arduino, то либо 12,8 МГц, либо 19,2 МГц
кристалл должен позволить вам получить именно эту скорость передачи данных. Но тогда
millis()
, delay()
и т. д. будут отключены.
- В чем разница между библиотеками Software Serial? Какая из них совместима с Arduino Nano?
- Использование последовательных контактов TX/ RX для связи по USB
- Проблема последовательной связи с общей землей SIM800L
- Работа с двойной скоростью для USART на Arduino Mega 2560
- Потеря данных при последовательном считывании с помощью Arduino Nano
- Serial.print пропускает или зависает внутри инструкции "if". Попытка вызвать функцию ЧЕРЕЗ последовательный uart
- Путаница в чтении Oscope Software Serial Arduino
- Взаимодействие A9G с Arduino для тестирования AT-команд