PySerial:前256字节数据损坏

6 投票
1 回答
914 浏览
提问于 2025-04-18 12:00

我正在使用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

撰写回答