使用pyserial自定义波特率

时间:2017-02-07 19:26:44

标签: python raspberry-pi pyserial

如何在pySerial上设置非标准波特率?根据文档,它说pySerial支持某些平台上的非标准波特率。当我尝试使用非标准波特率(12800)配置pySerial时,它最终选择了一个标准的而没有发出警告。如何检查我的平台是否支持非标准波特率?

Linux raspberrypi-zero1 4.4.34+ #930 Wed Nov 23 15:12:30 GMT 2016 armv6l GNU/Linux

我正在使用

df1 = data.frame(d1=c(0,0,0, 1), d2=c(1,NA,0,NA), d3=c(1,NA,0,NA))
df2 = data.frame(d1=c(0,0,0, 1), d2=c(0,1,0,0), d3=c(NA,0,NA,NA))

2 个答案:

答案 0 :(得分:0)

自定义波特率的设置方式与标准波特率相同,使用baudrate选项。 Pyserial将打开端口,并将波特率设置为给定值,然后Pyserial将从序列中读取波特率,以获得实际获得的设置。因此,如果它不匹配,则端口可能不支持非标准波特率。这是一个有效的例子:

>>> ser = serial.Serial('/dev/ttyS0', baudrate=2345)
>>> ser
Serial<id=0xb73467cc, open=True>(port='/dev/ttyS0', baudrate=2345, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)

答案 1 :(得分:0)

根据/usr/lib/python3/dist-packages/serial/serialposix.py,这是Raspberry Pi上的Python3中pyserial在打开和配置串行端口时使用的文件,如果您指定的波特率不是标准端口之一,它将调用{{1} }。如果平台尚未实现,则基类将抛出_set_special_baudrate。因此,如果您没有看到该错误,那么平台(尝试)会支持它。

在Raspberry Pi上,pyserial使用“ Linux”实现,这意味着已定义NotImplementedError('non-standard baudrates are not supported on this platform'),并尝试使用ioctl TCSETS2调用来设置自定义波特率。如果失败,则应该提高_set_special_baudrate

因此,总而言之,如果您以常规方式指定自定义波特率,则PySerial应该尽职地应用该波特率,并在失败时引发异常。如果不行,则可以肯定地说它已经起作用,但是Linux串行驱动程序很时髦,因此请放心。请注意,检查波特率的值不是确认成功的可靠方法-它仅包含您提供的请求波特率。