我试图从微控制器读取数据,配置:19200,8数据位,偶校验和1个停止位。控制器通过rs485传输数据,我正在通过rs485到rs232转换器读取数据。数据每4ms传输一次,并且在代码中显示的相应字节上每4ms需要一次反射。我在微控制器上编写了类似的代码,一切正常,但我需要在Python上实现相同的功能。从python读取时,我注意到通过ser.read()读取时会丢失一些字节。我还有一个逻辑分析仪转换,看看我缺少什么数据。我在类似的帖子上尝试了多种解决方案,但它对我没有用,因为解决方案要求我增加暂停时间 例如Losing data in received serial string
import serial
import time
ser = serial.Serial()
ser.port='COM1' # This is COM1, use 1 for COM2 etc
ser.baudrate=19200
ser.bytesize=serial.EIGHTBITS
ser.parity=serial.PARITY_EVEN
ser.stopbits=serial.STOPBITS_ONE
ser.xonxoff=0
ser.rtscts=0
ser.timeout=0
while True:
rxbuf = ser.read(1)
print(rxbuf)
if(rxbuf == b'\x05' or rxbuf == b'\x06' or rxbuf == b'\x15'):
time.sleep(0.004)
ser.write(b'\x05')
elif (rxbuf == b'\x02' or rxbuf == b'\x01'):
rxbuf_len = ser.read(16)
print(rxbuf_len)
输出: B '\ X05 \' B '\ X05 \' B '\ X05 \' B '\ X05 \' B '\ XF5 \' B '\ X28 \' B '\ X76 \' B '\ X02 \' B '\ XF2 \ X97 \ X00 \ X00 \ x8er \ x9a \ XC0 \ X14 \ XFF \ XFF |:F \ X18 \ X00'
这是错误的,在0xF5之前有一个0x02,除了许多其他字节之外还没有被读取。