我试图通过虚拟COM端口与硬件设备通话。主机是PC Windows OS PC。设备正在使用921600波特率。此代码有效:
DCB dcb; ... dcb.BaudRate = CBR_115200; SetCommState(hPort, &dcb);
一旦我改变波特率:
dcb.BaudRate = 921600;
SetCommState失败,上一个错误为0x57
(参数不正确)。这是否意味着Windows API会阻止除预定义值之外的任何波特率?或者,可能会将虚拟COM端口配置为允许此波特率?
虚拟COM端口是CameraLink连接的一部分。我正在与CameraLink板卡供应商交谈。但我需要知道Windows串行通信API是否支持自定义波特率。
答案 0 :(得分:6)
我刚刚快速访问了MSDN文档,这里有关于DCB结构中BaudRate属性的说法。
BaudRate 通信设备运行的波特率。该成员可以是实际波特率值,也可以是以下索引之一。 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个停止位。
这让我想知道你所遇到的问题是某些组合是什么导致的,而不仅仅是设置波特率。
也许您的波特率很好,但通过选择波特率可以使停止位数或奇偶校验长度无效,当波特率设置回标准设置时,再次变为有效。
我不知道你处理的硬件所以我不能说100%如果是这种情况,我一般只知道串口编程,但就个人而言,我的下一步是将波特率设置为什么我需要保持原样,尝试块中其他标志的所有不同组合。
可以在此处找到DCB结构的官方MSDN页面:
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