自定义波特率

我想通过虚拟COM端口与硬件设备通话。 主机是PC Windows OS PC。 设备正在使用921600波特率。 此代码工作:

 DCB dcb;
 ...
 dcb.BaudRate = CBR_115200;
 SetCommState(hPort,&dcb);

一旦我改变波特率:

 dcb.BaudRate = 921600;

SetCommState失败,最后一个错误0x57 (参数不正确)。 这是否意味着Windows API可以防止除预定义值之外的任何波特率? 或者,也许,虚拟COM端口可能被configuration为允许此波特率?

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

Solutions Collecting From Web of "自定义波特率"

Iv'e只是有一个快速的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位。 具有2个停止位的5个数据位的使用是无效的组合,因为具有1.5个停止位的6个,7个或8个数据位。

这让我想知道你所遇到的问题是某些组合是什么导致的,而不仅仅是设置波特率。

也许你的波特率是好的,但是通过选择波特率,使得停止位的数量或奇偶校验长度无效,当波特率恢复到标准设置时,再次变为有效。

我不知道你处理的硬件,所以我不能说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