#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 校验和调试工具 - 详细分析STM32输出的原始数据帧 """ import serial import struct import time # 协议常量 FRAME_HEADER = bytes([0xAA, 0x55]) FRAME_FOOTER = bytes([0x0D, 0x0A]) TYPE_GPS = 0x01 TYPE_IMU = 0x02 def calculate_checksum(data): """计算16位累加和""" return sum(data) & 0xFFFF def main(): port = "COM28" baudrate = 921600 print(f"打开串口 {port} @ {baudrate}") try: ser = serial.Serial(port, baudrate, timeout=1) print("串口已打开,接收数据中...\n") buffer = bytearray() frame_count = 0 while frame_count < 5: # 只分析前5帧 if ser.in_waiting > 0: data = ser.read(ser.in_waiting) buffer.extend(data) # 查找帧头 while len(buffer) >= 9: idx = buffer.find(FRAME_HEADER) if idx == -1: buffer.clear() break if idx > 0: buffer = buffer[idx:] # 检查是否有足够的数据解析帧头 if len(buffer) < 5: break frame_type = buffer[2] payload_len = struct.unpack('= 5: break time.sleep(0.01) ser.close() print("分析完成") except Exception as e: print(f"错误: {e}") import traceback traceback.print_exc() if __name__ == "__main__": main()