我使用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)
行中发表评论。之后,即使我阅读了大量数据,也不会出现错误。
是否有其他解决方案,而不仅仅是跳过第一条消息?
答案 0 :(得分:0)
这可能只是线路上的一些噪音。通常,对于超过115200的波特率,您需要2个停止位,因此它将是:
whenChanged