Пользовательская скорость передачи данных
Я пытаюсь соединиться с устройством через виртуальный COM-порт. Компьютер ПК Windows ПК ОС. Устройство работает со скоростью 921600 БОД. Этот код работает:
DCB dcb; ... dcb.BaudRate = CBR_115200; SetCommState(hPort, &dcb);
как только я изменю скорость передачи данных:
dcb.BaudRate = 921600;
SetCommState завершается с последней ошибкой 0x57
(параметр задан неверно). Означает ли это, что Windows API предотвращает любую скорость передачи данных, кроме предопределенных значений? Или, может быть, виртуальный COM-порт может быть настроен для этой скорости передачи?
виртуальный COM-порт является частью соединения CameraLink. Я разговариваю с поставщиком платы CameraLink. Но мне нужно знать, поддерживает ли Windows serial communications API пользовательские скорости передачи данных.
1 ответов
У Iv'e просто была быстрая поездка в документы MSDN для этого, и вот что говорится о свойстве BaudRate в структуре DCB.
скорость скорость передачи данных, с которой работает устройство связи. Этот член может быть фактическим значением скорости передачи данных или одним из следующих индексов. CBR_110. CBR_300, CBR_600, CBR_1200, CBR_2400, CBR_4800, CBR_9600, CBR_14400, CBR_19200, CBR_38400, CBR_57600, CBR_115200, CBR_128000, CBR_256000
Так что в теории в по крайней мере, у вас не должно быть проблем с настройкой скорости последовательного порта.
Он также заявляет далее, что есть некоторые комбинации, которые недействительны (в частности, при программировании последовательного чипа 8250)
Примечания Когда структура DCB используется для настройки 8250, следующие ограничения применяются к значениям, указанным для членов ByteSize и StopBits: Количество битов данных должно быть от 5 до 8 бит. Использование 5 бит данных с 2 стоп-бита-недопустимая комбинация, как и 6, 7 или 8 бит данных с 1,5 стоп-битами.
Это заставляет меня задаться вопросом, является ли проблема в том, что определенные комбинации являются причиной вещей, а не просто установкой скорости передачи данных, например.
возможно, ваш baudrate в порядке, но, выбрав этот baudrate, вы аннулируете количество стоп-битов или длину четности, которая, когда baudrate возвращается к стандартной настройке, становится действительной снова.
Я не знаю аппаратного обеспечения, с которым вы имеете дело, поэтому я не могу сказать 100%, если это так, я знаю только программирование последовательного порта в целом, но лично мой следующий шаг будет установить baudrate на то, что мне нужно, оставив это как есть, попробуйте все различные комбинации других флагов в блоке.
можно найти официальную страницу MSDN для структуры DCB здесь:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363214(v=vs. 85).aspx
вы также можете найти функцию BuildCommDCB некоторой помощи:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363143(v=vs. 85).aspx