PySerial:前256字节数据损坏
我正在使用pyserial来处理通过串口以1.25MBaud的速度传输的数据。我用一个非常简单的线程来收集这些数据:
class SerialReadThread(StoppableThread):
def __init__(self, port):
super(SerialReadThread, self).__init__()
self.serial = s.Serial(
port=port,
baudrate=1250000, # 1.25 MBaud
bytesize=s.EIGHTBITS,
parity=s.PARITY_NONE,
stopbits=s.STOPBITS_ONE,
timeout=0.5 # Do not wait longer than a half second for next message
)
self.data = []
def run(self):
# Discard old Buffer Data
self.serial.flushInput()
#self.serial.read(256)
while not self.stopped():
data = self.serial.read(64)
self.data.append(data)
log.debug(":".join("{:02x}".format(ord(c)) for c in data))
在读取和处理数据时,我发现前256个字节中总是有一个字节是错误的。通常应该是8个字节的消息,有时候却变成了9个字节,我完全不知道这个多出来的字节是从哪里来的。如果我在启动接收器后再启动发送器,就不会传输错误的字节。到目前为止,唯一有效的解决办法就是注释掉这一行 self.serial.read(256)
。这样一来,即使我读取大量数据,也不会出现错误。
除了跳过前面的消息,还有其他解决办法吗?
1 个回答
0
这可能只是线路上的一些干扰。通常情况下,当波特率超过115200时,你需要使用两个停止位,所以设置应该是:
stopbits=s.STOPBITS_TWO