Skip to content

yipshing/Serial-Port-Decoder-Assistant

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

STM32 IMU Host

仓库名建议:stm32-imu-host

基于 Python + PySide6 + pyserial 开发的本地串口可视化上位机,用于与 STM32 IMU 项目进行串口通信、协议识别、数据解码与后续算法验证。

当前项目已经完成基础上位机框架、串口调试助手与协议解码雏形,可作为后续 IMU 数据可视化、ZUPT/INS 实时解算、数据记录与结果分析的开发基础。

项目特点

  • 支持本地串口设备扫描、波特率选择与串口开关控制
  • 支持 ASCII / HEX 发送与接收显示
  • 支持串口来源识别,并对常见 USB 转串口设备进行高亮提示
  • 支持协议自动识别、帧同步与 XOR 校验
  • 支持 32B / 64B 两类协议帧混合解析
  • 支持 RTC / IMU_RAW / IMU_RAW_FULL / INS_POS 实时解码
  • 支持回报率统计与实时参数卡片展示
  • 具备后续扩展实时解算、曲线绘制、数据存储的良好结构

当前功能

1. 串口调试

  • 串口号选择
  • 波特率选择
  • 串口打开 / 关闭
  • 串口数据发送
  • 串口数据接收显示
  • HEX / 文本模式切换
  • 时间戳显示

2. 协议识别与解码

  • 自动识别帧头 AA 55
  • 自动判断不同命令字对应的包长
  • 支持校验规则自动验证
  • 识别成功后启用解码按钮
  • 解码结果以文本和参数卡片两种形式展示

3. 当前支持协议

  • CMD 0x01:RTC_TIME,32 字节
  • CMD 0x10:IMU_RAW,32 字节
  • CMD 0x11:IMU_RAW_FULL,64 字节
  • CMD 0x20:INS_POS,32 字节

项目结构

mechine/
├─ host_app/
│  ├─ __init__.py
│  ├─ serial_tool.py        # 主界面、串口控制、协议识别与解码逻辑
│  └─ serial_worker.py      # 串口后台线程,负责非阻塞收发
├─ protocol/
│  ├─ imu_protocol.h        # STM32 端协议定义
│  ├─ imu_protocol.c        # STM32 端协议打包与格式化实现
│  └─ zupt.py               # 后续 ZUPT / INS 解算测试算法
├─ run_serial_tool.py       # 上位机启动入口
└─ README.md

软件架构概览

当前上位机可以概括为以下几个层次:

  1. 设备通信层
    STM32 IMU 通过串口发送协议帧,上位机通过 pyserial 与设备建立通信。

  2. 后台收发层
    SerialWorker 在独立线程中完成串口读写,避免阻塞 GUI 主线程。

  3. 协议处理层
    包括帧缓存、帧头同步、包长判断、命令识别与 XOR 校验,并将有效数据包送入解码器。

  4. 界面展示层
    基于 PySide6 构建,负责串口配置、发送控制、接收显示、协议解码控制、实时参数卡片与状态栏展示。

  5. 后续算法扩展层
    未来将接入 zupt.py、实时 INS 解算、轨迹显示、数据保存与离线分析等功能。

开发环境

推荐使用 Anaconda 创建独立环境,并统一使用 conda-forge 安装依赖。

推荐环境创建命令

conda create -n imu_host_clean -c conda-forge -y ^
  python=3.11 ^
  pyside6 pyserial pyserial-asyncio ^
  numpy scipy numba pandas h5py pyyaml ^
  pyqtgraph matplotlib ^
  pytest black isort ruff loguru filterpy transforms3d

激活环境:

conda activate imu_host_clean

运行方式

在项目根目录下执行:

python run_serial_tool.py

界面说明

顶部串口配置区

  • 选择串口
  • 选择波特率
  • 刷新端口
  • 打开 / 关闭串口

左侧控制区

  • 协议解码控制

右侧功能区

  • 发送区
  • 接收区
  • 解码结果区
  • 实时参数卡片

底部状态栏

  • 串口连接状态
  • 最近时间窗内的回报率统计

协议说明

共同特征

  • 帧头:0xAA 0x55
  • 字节序:小端
  • 校验方式:XOR

校验规则

  • RTC_TIME (0x01)checksum = XOR(0..8),校验位位于 byte[9]
  • IMU_RAW (0x10)checksum = XOR(0..30),校验位位于 byte[31]
  • IMU_RAW_FULL (0x11)checksum = XOR(0..62),校验位位于 byte[63]
  • INS_POS (0x20)checksum = XOR(0..30),校验位位于 byte[31]

当前已实现的解码字段

  • RTC_TIME:时间同步信息
  • IMU_RAW:加速度、角速度 z、航向角、气压
  • IMU_RAW_FULL:完整加速度、三轴角速度、姿态角、气压
  • INS_POS:位置与速度信息

后续计划

  • 接入 zupt.py,实现实时 ZUPT/INS 解算
  • 增加实时曲线绘图与轨迹显示
  • 增加原始数据保存、CSV 导出与回放
  • 增加协议发送模板与参数配置面板
  • 增加更完整的异常处理、日志系统与测试用例

注意事项

  • 推荐在 VS Code 中运行本项目,当前环境下 PyCharm 可能存在 Qt 运行时兼容问题
  • 建议尽量避免 pip + conda 混装 Qt 相关依赖
  • 若串口无法打开,请先检查串口占用、驱动状态与 USB 转串口芯片识别情况

许可证

当前仓库未单独声明许可证。如需开源发布,建议补充 LICENSE 文件。

About

一个简易的串口调试解码助手

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors