设备通过串口发送给PC或者树莓派等主控时,发过来的数据往往是HEX码,此时需要进行合适的转码才能够将所得到的数据正确的显示出来

self.data = self.data.decode('GB2312','ignore') 

通过上述的‘GB2312’方式就可以获取设备传过来的数据。

以下为python读取串口数据并打印出来的程序

#!/usr/bin/python
# -*-coding: utf-8 -*-

import serial
import threading
import binascii
from datetime import datetime
import struct


class SerialPort:
    def __init__(self, port, buand):
        self.port = serial.Serial(port, buand)
        self.port.close()

        if not self.port.isOpen():
            self.port.open()
        self.read_data()

    def port_open(self):
        if not self.port.isOpen():
            self.port.open()

    def port_close(self):
        self.port.close()

    def send_data(self):
        self.port.write('')

    def read_data(self):
        global is_exit
        global data_bytes
        # self.data = self.data.decode('utf-8')
        while not is_exit:
            count = self.port.inWaiting()
            self.data = self.port.readline()
            print(self.data)
            self.data.strip()

            self.data = self.data.decode('GB2312','ignore')
            print(self.data)
            if count > 0:
                rec_str = self.port.read(count)
                data_bytes = data_bytes + rec_str
                print('当前数据接收总字节数:'+str(len(data_bytes))+' 本次接收字节数:'+str(len(rec_str)))
                # print(str(datetime.now()),':',binascii.b2a_hex(rec_str))

if __name__ == '__main__':
    serialPort = 'COM4'  # 串口
    baudRate = 9600  # 波特率
    is_exit = False
    data_bytes = bytearray()
    # 打开串口
    mSerial = SerialPort(serialPort, baudRate)

其中import有一部分没用,可以适当的删除。

测试结果

STM32通过串口和PC进行通信

测试结果

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐