qq_40483920
QNee
采纳率0%
2019-07-30 09:18

在Python3.7的环境下,每次都是执行到serial.read()就卡住了。

import serial

if name == '__main__':
serial = serial.Serial('COM3',115200)
if serial.isOpen():
print('串口打开成功!\n')
f = open('./test.txt','a')
print(1)
#pass
else :
print('串口打开失败!\n')

    try:
            getBytes=b''
            while True:
                    count = serial.inWaiting()
                    if count > 0:
                            data = serial.read(count)
                            print('数据读取成功')
                            if data != getBytes:
                                    print(data)
                                    f.write(data.decode('utf-8'))
                                    f.write('\n')
                                    getBytes=data

    except KeyboardInterrupt:
            if serial != None:
                    f.close()
                    serial.close()
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • weixin_43805698 牛在哪里 2年前

    加个延时试下
    serial.iswaiting启动接收,并返回接收数据的长度,然后用read(n)将这指定的数据读出来。但现实中的问题是两者的中间需要加延时(根据波特率计算发送内容所需的时间,这样就不会出现延时过短读出的不全;延时时间长了就会出现前后帧发出的内容重合到一起),此外如果需要判断什么时候串口不活动,可以再serial.iswaiting一直延时(超过几个字符的传送时间,软件延时计数器累加),而在循环体外将计数器清零,在累计的几个字符时间接受的数据长度还为0则认为通讯结束。

    点赞 1 评论 复制链接分享