如何让 PySerial 接受 921600 波特率

Posted

技术标签:

【中文标题】如何让 PySerial 接受 921600 波特率【英文标题】:How to get PySerial to accept 921600 Baud rate 【发布时间】:2015-07-15 02:15:36 【问题描述】:

我们有一个电机控制器,它实现了一个 USB->Virtual COM 端口,该端口具有 921600 的固定波特率(手册甚至声明波特率不能更改)。我发现如果我使用像终端这样的终端程序,我可以通过自定义波特率 921600 并与仪器通信没有问题。我们使用的是 Windows 7 pro,64 位版本。

但是,当我尝试使用 Python 2.7.10(32 位)在 PySerial (v.2.7) 中执行此操作时,如下所示:

import serial
ser = serial.Serial("COM3",921600)

我总是遇到错误说参数不正确。

文件“C:\Python27\lib\site-packages\serial\serialwin32.py”,第 202 行,在 _reconfigurePort raise ValueError("Cannot configure port, some setting was wrong. Original message: %r" % ctypes.WinError()) ValueError:无法配置端口,某些设置错误。原始消息:WindowsError(87, '参数不正确。')

有效的波特率似乎是 serialwin32.py 中列出的那个

BAUDRATES = (50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
             9600, 19200, 38400, 57600, 115200)

当我使用列表中的任何波特率时,我可以打开串行端口(但不必与仪器通信)。

仅在 serialwin32.py 中将 921600 百添加到此列表中不会做任何事情。我已经搜索了几个论坛和网站,到目前为止,似乎没有人知道如何在 Windows 中设置这个更高的波特率。在旧版本的 Windows 中,115200 以上的波特率过去是不可靠的,但我认为 Windows 7 现在应该能够处理更高的传输速率,尤其是许多 USB IC (如 FTDI 和 CH430)可以处理比 115200 高得多的波特率。

有谁知道如何让 pySerial 在 Windows 中接受比 115200 更高的波特率?

【问题讨论】:

I assume that Windows 7 should be able to handle a much higher transfer rate now -- 我认为 Windows 中有效波特率的规范很可能多年来没有改变,因为以您的速度运行的 RS232 端口的潜在和实际应用程序缺乏'正在提议。 你的电机控制器是什么牌子的? 纽波特 ESP301。它有一个固定在 921600 的 USB 到 VCOM。奇怪的是我可以用终端程序与它交谈,但我无法让 PySerial 获取 921600,所以我认为它与硬件没有任何关系。这是新端口上的直接 USB-B 到我笔记本电脑上的 USB-A。 Windows 将其检测为 COM 端口。 【参考方案1】:

我试了921600没问题。

您的适配器不支持高速 rs232。

您需要购买 CP21XX 或同等转换器。

Moxa 或 Lantronix 是不错的品牌(测试和使用)。

试一试:win7x64,Python2.7x32

【讨论】:

我接受这个答案是因为我在 Keyspan USA-19HS 上以 921600 波特率尝试了 PySerial,并且连接没有问题。这表明 Newport ESP301 USB 到 VCom 实际上并没有以宣传的 921600 运行。我在几个地方读到 USB 到 VCom 通常不遵守波特率,它可能与实际波特率完全不同率是。

以上是关于如何让 PySerial 接受 921600 波特率的主要内容,如果未能解决你的问题,请参考以下文章

自定义波特率

《哈利·波特》作者曾有"自杀念头"

为啥pyserial填充USB数据包?

USART 到 4MBps!如何? STM32L151xx

STM32串口波特率怎么设置?使用库直接设置吗?像51那样寄存器的设置?

哈利波特的宠物