Последовательный порт не принимает скорость передачи данных в бодах

#c #linux #serial-port #centos #baud-rate

#c #linux #последовательный порт #centos #скорость передачи данных в бодах #c

Вопрос:

Я пытаюсь настроить последовательный порт на centos, но не могу заставить его работать. это код, с которым у меня возникли проблемы.

 tcgetattr(idComDev[i], amp;options); // get current settings

    printw("default baudrate is %d ", cfgetispeed(amp;options));

    cfsetispeed(amp;options, B115200); // set baud rate
    cfsetospeed(amp;options, B115200); // set baud rate

tcsetattr(idComDev[i], TCSANOW, amp;options);// save the settings

    printw("Seg %d = COM%hd at %d Baudrate",i,CommNo[i], cfgetispeed(amp;options));
  

Вывод из этого таков: Default baud rate is 4098 Seg0 = COM1 at 4098 Baudrate .

Почему он находится на отметке 4098? Я нигде не могу найти этот показатель бодрствования.

Если я установлю скорость передачи в бодах на 1800, он скажет, что она равна 10. Если я установлю его на 9600, он скажет, что он равен 13.

Я провел некоторые исследования и обнаружил, что, к сожалению, аппаратное обеспечение не может поддерживать такую высокую скорость передачи данных, но у меня есть Java-программа на том же компьютере, которая коммутирует с тем же устройством, к которому я пытаюсь подключиться. Поэтому я знаю, что этого не может быть.

Кто-нибудь знает, что происходит и как это исправить?

Комментарии:

1. @phresnel это скорость передачи данных в бодах, если вы посмотрите здесь easysw.com /~mike/serial/serial.html затем вы увидите, что при использовании termios всем байдратам предшествует буква B

2. Понятно, у меня было опасение, что вы, возможно, используете расширение компилятора, которое допускает двоичные литералы.

Ответ №1:

B115200 является макросом и расширяется до 0x1002 . Это комбинация двух битов: 0x1000 сигнализирует о том, что это нестандартная скорость (как вы обнаружили), а 0x2 — вторая нестандартная скорость ( B57600 то есть 0x1001 первая нестандартная скорость).

Комментарии:

1. извините, но я не совсем понимаю, как это отвечает на вопрос?

2. О, 0x1002 — это 4098 — это B115200. Вы установили для своего последовательного порта значение B115200. Просто нет проблем, которые нужно исправить.