Windows 自定义波特率

Windows 自定义波特率,windows,serial-port,baud-rate,Windows,Serial Port,Baud Rate,我正在尝试通过虚拟COM端口与硬件设备通信。主机为PC Windows OS PC。设备的波特率为921600。此代码适用于: DCB dcb; ... dcb.BaudRate = CBR_115200; SetCommState(hPort, &dcb); DCB-DCB; ... dcb.BaudRate=CBR_115200; 设置通信状态(hPort和dcb); 一旦我改变波特率: dcb.BaudRate = 921600; dcb.BaudRate=921600; SetCom

我正在尝试通过虚拟COM端口与硬件设备通信。主机为PC Windows OS PC。设备的波特率为921600。此代码适用于:

DCB dcb; ... dcb.BaudRate = CBR_115200; SetCommState(hPort, &dcb); DCB-DCB; ... dcb.BaudRate=CBR_115200; 设置通信状态(hPort和dcb); 一旦我改变波特率:

dcb.BaudRate = 921600; dcb.BaudRate=921600; SetCommState失败,出现最后一个错误
0x57
(参数不正确)。这是否意味着Windows API阻止除预定义值之外的任何波特率?或者,可以将虚拟COM端口配置为允许此波特率


虚拟COM端口是CameraLink连接的一部分。我正在和CameraLink板供应商交谈。但是我需要知道Windows串行通信API是否支持自定义波特率。

Iv'e刚刚快速浏览了MSDN文档,这里介绍了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个停止位也是无效的组合

这让我想知道你的问题是否是某些组合是导致事情发生的原因,而不仅仅是设置波特率

也许您的波特率是好的,但是通过选择该波特率,您可以使停止位的数量或奇偶校验长度无效,当波特率设置回标准设置时,奇偶校验长度将再次有效

我不知道你要处理的硬件,所以我不能说100%,如果是这样的话,我只知道一般的串行端口编程,但就个人而言,我的下一步是将波特率设置为我需要的,然后保持原样,尝试块中其他标志的所有不同组合

DCB结构的官方MSDN页面可在以下位置找到:

您也可以在一些帮助中找到BuildCommDCB函数:


如果这是一个虚拟COM端口,通常配置的波特率并不重要。如果你把利率降低到9600或4800左右,你认为它会变慢吗?根据我使用CameraLink的经验:COM端口仅用于配置摄像头,应能在标准低数据速率(通常为9600波特)下工作。CameraLink本身速度更快,但不通过COM端口。其他实现是非标准的。(参见)@Adrien Plisson:根据Cameralink规范,摄像头和帧捕获器应至少支持9600波特。实际上,框架抓取器我正在使用115200支架。似乎帧捕获器阻止了我,而不是Windows。如果你尝试较低的速度,你会得到任何有意义的完整数据吗?@shawty:当波特率不符合设备要求时,通信就无法工作。设置不正确的波特率会导致垃圾输入。我的端口设置非常标准:字节大小8,奇偶校验无,流控制无,停止位1。同时,我从Cameralink线路板供应商处得到信息,该波特率不受支持。感谢BuildCommDCB链接:)