Skip to content

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

6 Commits

Folders and files

Repository files navigation

STM32F103 MPU6050 OLED 实时三维姿态立方体

这是一个基于 STM32F103C8T6 + MPU6050 + SSD1306 OLED 的实时姿态显示工程。

系统读取MPU6050六轴数据,完成陀螺仪静态零偏校准、姿态估计与四元数更新,并在128×64 OLED上实时绘制带透视效果和隐藏边虚线的三维线框立方体。

功能特点

  • MPU6050原始六轴数据读取与物理量换算
  • 上电采集500组数据完成陀螺仪静态零偏校准
  • 加速度计倾角计算与姿态状态观察
  • Madgwick四元数姿态融合
  • 三维顶点旋转、透视投影和屏幕裁剪
  • 线框立方体12条边绘制
  • 隐藏边虚线显示
  • SSD1306 128×64 framebuffer绘图
  • I2C2 400 kHz + DMA OLED刷新
  • STM32F103 I2C BUSY冷启动恢复
  • OLED开屏前GDDRAM清零,避免随机雪花屏
  • “冠凯军工 / Jikl62制作”启动画面
  • 完整的Ozone可观察模块状态结构

数据流程

flowchart LR
    MPU["MPU6050 六轴数据"] --> CAL["零偏校准与单位换算"]
    CAL --> ATT["姿态数据处理"]
    ATT --> Q["Madgwick Quaternion"]
    Q --> CUBE["Cube3D 旋转与透视投影"]
    CUBE --> FB["128x64 Framebuffer"]
    FB --> DMA["I2C2 DMA"]
    DMA --> OLED["SSD1306 OLED"]
Loading

硬件连接

MPU6050

MPU6050 STM32F103C8T6 说明
SCL PB6 I2C1_SCL
SDA PB7 I2C1_SDA
VCC 按模块要求连接 电源
GND GND 地

OLED

OLED STM32F103C8T6 说明
SCL PB10 I2C2_SCL
SDA PB11 I2C2_SDA
VCC 按模块要求连接 电源
GND GND 地

当前OLED地址为0x3C,程序也会继续探测常见地址0x3D。

外设配置

  • I2C1:MPU6050,PB6/PB7
  • I2C2:SSD1306 OLED,PB10/PB11
  • I2C2速度:400 kHz Fast Mode
  • I2C2 Duty Cycle:2
  • OLED发送:DMA1 Channel 4 TX
  • 调试接口:SWD

具体配置以仓库中的cuijiaming_gift.ioc为准。

工程结构

Core/Inc + Core/Src
├── mpu6050         MPU6050驱动、换算和静态零偏校准
├── attitude        加速度计倾角与姿态基础数据
├── orientation     Madgwick四元数姿态融合
├── oled            SSD1306控制、framebuffer和DMA传输
├── graphics        像素、直线、虚线、矩形和1-bit位图
├── cube3d          三维立方体、透视投影和隐藏边判断
├── realtime_cube   实时绘制与OLED提交调度
├── i2c_f1_recovery STM32F103 I2C BUSY勘误恢复
├── startup         冷启动检测、OLED探测和启动状态
├── startup_font    启动画面最小字模资源
└── startup_screen  启动画面framebuffer生成

编译方法

开发环境:

  • STM32CubeMX
  • Keil MDK-ARM
  • ARMCLANG 6.24

使用Keil打开:

MDK-ARM/cuijiaming_gift.uvprojx

然后执行:

Project -> Rebuild all target files

当前完整Rebuild结果:

Code=36044
RO-data=840
RW-data=12
ZI-data=4732

0 Error
0 Warning

启动流程

  1. 初始化GPIO、DMA、I2C1和I2C2。
  2. 等待100 ms,使OLED和I2C总线稳定。
  3. 检查I2C2 BUSY,必要时执行STM32F103官方勘误恢复流程。
  4. 最多尝试3次OLED地址探测。
  5. 在Display OFF状态清零全部1024字节GDDRAM。
  6. 显示“冠凯军工 / Jikl62制作”启动页。
  7. MPU6050保持静止并完成500组陀螺仪零偏校准。
  8. 初始化姿态、四元数和立方体模块。
  9. 自动切换到实时三维立方体显示。

上电后的校准阶段请保持MPU6050完全静止,否则陀螺仪零偏会被错误估计。

Ozone调试

可以直接观察以下稳定全局结构:

变量 内容
g_mpu6050 原始六轴、物理量、零偏、校正角速度和通信状态
g_attitude 加速度计倾角与姿态状态
g_orientation 四元数、欧拉角、Madgwick状态和更新统计
g_cube3d 三维顶点、投影点、可见面和隐藏边状态
g_oled OLED地址、初始化、错误和刷新统计
g_oled_dma DMA启动、完成、耗时和错误状态
g_realtime_cube 实时渲染与帧提交状态
g_startup 冷启动BUSY恢复、OLED探测、GDDRAM和启动页状态

注意事项

  • 请不要随意修改I2C引脚、I2C2速度或DMA通道。
  • 修改CubeMX配置后,应确认自定义模块仍被保留在Keil工程中。
  • 仓库不提交Keil编译产物和本机调试会话文件;克隆后请执行一次完整Rebuild。
  • main.c只负责模块初始化和顶层调度,具体功能位于独立模块中。

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages