1. 项目概述
在嵌入式开发领域,姿态解算是一个经典而实用的课题。本项目基于STM32F103C8T6最小系统板,通过MPU6050六轴传感器采集加速度和角速度数据,运用卡尔曼滤波算法实现姿态解算,最终将解算得到的俯仰角、横滚角和偏航角实时显示在0.96寸OLED屏幕上。
这个项目非常适合想要学习嵌入式传感器开发的初学者。它不仅涵盖了硬件接线、驱动开发、算法实现等完整流程,还能让你直观地看到姿态解算的实际效果。通过这个项目,你可以掌握I2C通信协议、传感器数据采集、滤波算法等嵌入式开发的核心技能。
1.1 硬件清单
要完成这个项目,你需要准备以下硬件设备:
- 主控板:STM32F103C8T6最小系统板(蓝色药丸板),这是性价比极高的ARM Cortex-M3内核开发板
- 传感器:MPU6050模块,集成了3轴加速度计和3轴陀螺仪,通过I2C接口通信
- 显示模块:0.96寸OLED显示屏(I2C接口),分辨率128×64
- 辅助配件:
- 杜邦线若干(建议使用不同颜色区分电源、地线和信号线)
- USB转TTL模块(如CH340G)用于程序下载
- 5V电源适配器或Micro USB线供电
- 软件工具:
- Keil MDK-ARM(V5.36及以上版本)
- STM32CubeMX(V6.0及以上版本)
- 串口调试助手(如SecureCRT或Putty,可选)
注意:MPU6050模块必须使用3.3V供电,接5V会烧毁传感器芯片。这是新手最容易犯的错误之一。
1.2 项目整体流程
本项目的完整实现流程可以分为以下几个关键步骤:
- 硬件连接:正确连接STM32与各外设模块
- 工程配置:使用STM32CubeMX配置时钟、I2C等外设
- 驱动开发:
- MPU6050驱动(数据采集与处理)
- OLED驱动(数据显示)
- 算法实现:卡尔曼滤波姿态解算
- 系统集成:主程序逻辑实现
- 调试优化:硬件测试与参数调整
每个步骤都有其技术要点和注意事项,我们将在后续章节详细展开。特别提醒初学者,在开始编码前,务必确保硬件连接正确,这是项目成功的基础。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件接线说明
正确的硬件连接是项目成功的第一步。本节将详细介绍STM32与各外设模块的连接方式,包括引脚定义、接线注意事项等。
2.1 STM32与MPU6050接线
MPU6050通过I2C接口与STM32通信,具体接线如下:
| STM32F103C8T6 | MPU6050模块 | 说明 |
|---|---|---|
| 3.3V | VCC | 电源正极(必须3.3V!) |
| GND | GND | 电源地 |
| PB6 | SCL | I2C时钟线 |
| PB7 | SDA | I2C数据线 |
关键细节:
- I2C总线需要上拉电阻,通常MPU6050模块已经内置4.7kΩ上拉电阻
- 如果模块上有AD0引脚,接GND时I2C地址为0x68,接VCC时为0x69
- 确保电源稳定,电压波动会影响传感器精度
2.2 STM32与OLED模块接线
OLED显示模块同样使用I2C接口,可以与MPU6050共用I2C总线:
| STM32F103C8T6 | OLED模块 | 说明 |
|---|---|---|
| 3.3V | VCC | 电源正极 |
| GND | GND | 电源地 |
| PB6 | SCL | 与MPU6050共用I2C时钟线 |
| PB7 | SDA | 与MPU6050共用I2C数据线 |
注意事项:
- 部分OLED模块需要调整电阻来设置I2C地址(通常为0x78或0x7A)
- OLED显示对比度可以通过软件调节,无需硬件改动
- 如果显示不正常,检查模块是否支持3.3V供电(大多数0.96寸OLED都支持)
2.3 STM32与USB转TTL接线(下载程序)
程序下载需要使用USB转TTL模块,接线如下:
| STM32F103C8T6 | USB转TTL | 说明 |
|---|---|---|
| PA9 | TXD | 串口发送(接TTL的RXD) |
| PA10 | RXD | 串口接收(接TTL的TXD) |
| GND | GND | 共地 |
| 5V | 5V | 可选,用于给STM32供电 |
下载程序时的实用技巧:
- 使用FlyMcu等工具时,需要勾选"DTR低电平复位,RTS高电平进BootLoader"
- 如果无法连接,检查驱动是否安装正确(设备管理器查看COM端口)
- 波特率建议设置为115200,这是STM32 BootLoader的标准波特率
3. STM32CubeMX工程配置
STM32CubeMX是ST官方提供的图形化配置工具,可以大大简化外设初始化的过程。本节将详细介绍如何配置本项目所需的各项参数。
3.1 新建工程
- 打开STM32CubeMX,点击"Access to MCU Selector"
- 在搜索框输入"STM32F103C8T6",选择对应型号
- 点击"Start Project"开始新工程
- 暂时忽略"Project Manager"弹窗,点击"Cancel"
3.2 配置系统时钟
正确的时钟配置对系统稳定性至关重要:
- 点击左侧"System Core" → "RCC"
- 右侧"High Speed Clock (HSE)"选择"Crystal/Ceramic Resonator"(使用外部8MHz晶振)
- 点击顶部"Clock Configuration"标签
- 按以下参数配置:
- PLL Source: HSE
- PLL Mul: x9
- HCLK: 72MHz(最大时钟频率)
- APB1 Prescaler: /2 → 36MHz
- APB2 Prescaler: /1 → 72MHz
时钟树配置要点:
- STM32F103C8T6最高支持72MHz主频
- APB1总线外设(如I2C1)最大频率为36MHz
- APB2总线外设(如GPIO)最大频率为72MHz
3.3 配置I2C接口
MPU6050和OLED都使用I2C1接口:
- 点击左侧"Connectivity" → "I2C1"
- 配置参数:
- Mode: I2C Master
- I2C Speed Mode: Fast Mode (400kHz)
- GPIO Settings:
- PB6: I2C1_SCL
- PB7: I2C1_SDA
- 上下拉模式选择"Pull-up"(即使模块已有上拉电阻)
I2C配置经验:
- 标准模式(100kHz)和快速模式(400kHz)都支持,后者数据传输更快
- 如果通信不稳定,可以尝试降低速率或检查上拉电阻值
- I2C时序问题常常表现为设备无响应或数据错误
3.4 配置串口(可选,用于调试)
虽然本项目不必须使用串口,但配置串口有助于调试:
- 点击左侧"Connectivity" → "USART1"
- 配置参数:
- Mode: Asynchronous
- Baud Rate: 115200
- Word Length:
