stty не меняет скорость последовательного порта в Cygwin

2668
gbarry

Это подразумевает запуск Cygwin под Windows XP. У меня есть подлинный последовательный порт (COM1) на этой машине.

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

Сначала я попытался установить скорость из программы (используя вызовы termios), но это не сработало. Поэтому я решил попробовать изменить скорость с помощью существующей утилиты. Использование команды like stty -F /dev/ttyS0 9600разрешено, и, если я попробую другую скорость, я увижу изменения, когда я проверю их stty -F /dev/ttyS0. Но это не оказывает видимого влияния на фактическую скорость.

Мне трудно представить, что если Cygwin не сможет изменить скорость передачи данных, я не найду такого утверждения в своем поиске. Но я не нашел ничего подобного.

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

Изменить: я проверил с помощью осциллографа, и скорость передачи (выход, по крайней мере) действительно меняется на 9600, как я и предполагал. Итак, я сейчас собираюсь посмотреть на другие возможные настройки, которые могут мешать связи.

Решение: Одна вещь, которая очень помогла, - это мое открытие, что виртуальный последовательный порт USB будет самопроизвольно инициализироваться каждый раз, когда он отключен. Это избавило от необходимости перезагрузки хоста, чтобы отменить все, что HyperTerminal делал для устранения проблемы. Таким образом, я смог сделать много тестов за короткое время.

Решение пришло, когда я нашел команду, stty -F /dev/ttyS0 -aчтобы получить все параметры порта. Я запустил его до и после того, как позволил HyperTerminal «решить» проблему, записав результаты в файлы и затем используя результаты сравнения. Результаты: cs7. Это количество бит в каждом символе. Что-то по умолчанию инициализирует последовательные порты N-7-1. Решение, таким образом, так же просто, как:

stty -F /dev/ttyS0 9600 cs8

Примечание. Первоначальная проблема началась с вызовов termios. Там же можно применить то же решение. Но это вопрос, который необходимо решать в Stackoverflow.

0
Я посмотрел на эти настройки в диспетчере устройств, и он утверждал, что на 9600N81. Но это не то, что я вижу. Так что, возможно, настройка исходит из библиотеки Cygwin. gbarry 10 лет назад 0

1 ответ на вопрос

0
gbarry

Используйте эту команду,

stty -F /dev/ttyS0

чтобы получить все настройки порта. Затем посмотрите, что изменилось после начала работы порта.