自定义波特率

Posted

技术标签:

【中文标题】自定义波特率【英文标题】:Custom baud rate 【发布时间】:2011-10-10 14:13:50 【问题描述】:

我正在尝试通过虚拟 COM 端口与硬件设备通信。主机是PC Windows OS PC。设备以 921600 波特率工作。此代码有效:

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

一旦我改变波特率:

dcb.BaudRate = 921600;

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

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

【问题讨论】:

如果这是一个虚拟 COM 端口,通常配置的波特率无关紧要。如果您将利率降低到 9600 或 4800 左右,您是否看到它变慢了?我怀疑它不会。 根据我使用 CameraLink 的经验:COM 端口仅用于配置相机,并且应该以标准的低数据速率(通常为 9600 波特)工作。 CameraLink 本身要快得多,但不通过 COM 端口。其他实现是非标准的。 (见the CameraLink specification) @Adrien Plisson:根据 Cameralink 规范,相机和图像采集卡应至少支持 9600 波特。实际上,我正在使用的图像采集卡支持 115200。看起来图像采集卡阻止了我,而不是 Windows。 如果你尝试较低的速度,你会得到任何有意义的数据吗? @shawty:当波特率与设备要求不匹配时,通信不起作用。设置不正确的波特率会导致垃圾输入。 【参考方案1】:

我刚刚为此快速浏览了 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

【讨论】:

我的端口设置非常标准:字节大小 8,奇偶校验无,流控制无,停止位 1。同时,我从 Cameralink 板供应商那里得到信息,不支持此波特率。感谢 BuildCommDCB 链接 :)

以上是关于自定义波特率的主要内容,如果未能解决你的问题,请参考以下文章

51单片机自定义串口通讯协议控制流水灯+Proteus仿真

linux 怎么查看串口波特率

如何让 PySerial 接受 921600 波特率

attiny85软串口乱码

奈奎斯特定理 and 香农定理

在人员监控设备研发过程中,如何使用自适应波特率?