Я отправляю данные между трансивером XBee и моим ПК.
Проблема в том, что изначально (в моей программе) данные случайные символы. Только после открытия последовательного соединения в XCTU это работает.
Таким образом, последовательные данные отправляются правильно, но XCTU делает что-то для синхронизации моего компьютера с XBee. Скорость передачи данных установлена на 9600 с обеих сторон.
Кто-нибудь знает, что делает XCTU? Или как я могу воспроизвести это в моей C ++ программе?
Надеемся, что изображение ниже объясняет, что происходит более четко:
Настройки последовательного порта в Windows можно увидеть с помощью GetCommState и установить с помощью SetCommState. Используйте первый, чтобы увидеть, что установлен XCTU. Ваш код может затем использовать те же настройки, вызывая SetCommState.
Я нашел проблему. Я предполагал опции по умолчанию с объектом boost serial_port. После установки дополнительных параметров последовательная связь работает надежно.
Вот параметры, которые я в итоге установил:
port.set_option(asio::serial_port_base::baud_rate(9600));
port.set_option(asio::serial_port_base::character_size(8));
port.set_option(asio::serial_port_base::flow_control(asio::serial_port_base::flow_control::none));
port.set_option(asio::serial_port_base::parity(asio::serial_port_base::parity::none));
port.set_option(asio::serial_port_base::stop_bits(asio::serial_port_base::stop_bits::one));
где порт является объектом asio :: serial_port.