如何在pySerial上设置非标准波特率?根据文档,它说pySerial在某些平台上支持非标准波特率。当我尝试使用非标准波特率(12800)配置pySerial时,它最终选择了一个标准波特率,而没有抛出警告。如何检查我的平台是否支持非标准波特率?
The parameter baudrate can be one of the standard values: 50, 75, 110,
134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600,
115200. These are well supported on all platforms.
Standard values above 115200, such as: 230400, 460800, 500000, 576000,
921600, 1000000, 1152000, 1500000, 2000000, 2500000, 3000000, 3500000, 4000000
also work on many platforms and devices.
Non-standard values are also supported on some platforms (GNU/Linux, MAC
OSX >= Tiger, Windows). Though, even on these platforms some serial ports may
reject non-standard values.
我正在使用
Linux raspberrypi-zero1 4.4.34+ #930 Wed Nov 23 15:12:30 GMT 2016 armv6l GNU/Linux
发布于 2017-02-08 18:00:09
自定义波特率的设置方式与标准波特率相同,带有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)
发布于 2019-05-04 08:25:13
根据/usr/lib/python3/dist-packages/serial/serialposix.py
的说法,如果您指定的波特率不是标准波特率,它将调用_set_special_baudrate
。如果平台没有实现它,基类就会抛出NotImplementedError('non-standard baudrates are not supported on this platform')
。因此,如果你没有看到这个错误,那么平台(试图)支持它。
在Raspberry Pi上,pyserial使用"Linux“实现,这意味着定义了_set_special_baudrate
,并尝试使用ioctl TCSETS2调用设置自定义波特率。如果此操作失败,则会引发ValueError('Failed to set custom baud rate ({}): {}'.format(baudrate, e))
。
因此,总而言之,如果您以正常方式指定自定义波特率,PySerial应该尽职尽责地应用它,并在失败时引发异常。如果它没有,它应该是安全的假设它已经工作了,但Linux串行驱动程序是时髦的,所以买者自负。请注意,检查baudrate的值并不是确认成功的可靠方法-它只包含您提供的请求baudrate。
https://stackoverflow.com/questions/42098276
复制相似问题