传感器与显示
板载 BMI270 使用 SPI2;AHT20 与 OLED 共用 I²C1。开发顺序应是“先验证总线和器件身份,再写完整驱动和界面”,否则很难区分接线、时序、地址与上层逻辑问题。
BMI270 六轴 IMU
BMI270 集成三轴加速度计和三轴陀螺仪,通过 4 线 SPI2 与 STM32 通信。PA1 另用于加热,PA2 连接中断信号。

BMI270 器件位置;坐标方向以 PCB 丝印为准

BMI270 SPI2、INT1 与恒温加热驱动
| 信号 | MCU 引脚 | CubeMX 建议 |
|---|---|---|
| CS/NSS | PB12 | GPIO Output,软件控制片选 |
| SCK | PB13 / SPI2_SCK | SPI2 Master |
| MISO | PB14 / SPI2_MISO | SPI2 Master |
| MOSI | PB15 / SPI2_MOSI | SPI2 Master |
| INT1 | PA2 | GPIO EXTI(按驱动需求) |
| HEAT | PA1 / TIM2_CH2 | PWM,必须闭环限幅 |
BMI270 上电后需要加载配置文件才能进入正常工作状态。初始化至少完成:总线读写自检、芯片 ID、软复位、配置文件加载、量程/输出速率和错误状态检查。原始数据还需按量程换算,并处理坐标方向、静态零偏、温漂和滤波。
坐标系不要靠猜
说明书给出默认方向,但最终应以当前 PCB 丝印和实测旋转方向为准。分别沿单轴正向转动开发板,确认软件中的 X/Y/Z 符号后再接入姿态解算。
AHT20 温湿度传感器
AHT20 挂载在 I²C1,总线引脚为 PB6/SCL、PB7/SDA,标准 7 位地址为 0x38。

板载 AHT20 位置

AHT20 与 I²C1 的连接
| 项目 | 参数 |
|---|---|
| SCL | PB6 / I2C1_SCL |
| SDA | PB7 / I2C1_SDA |
| 7 位地址 | 0x38 |
| HAL 常用传参 | 0x38 << 1,即 0x70 |
典型读取流程为上电等待、检查校准状态、必要时初始化、触发测量、等待 busy 清除、读取 6 字节并换算温湿度。具体命令与等待时间以 AHT20 数据手册和所用驱动版本为准。
0.96 英寸 I²C OLED
OLED 接口用于 SSD1306 类 0.96 英寸模块,与 AHT20 共用 PB6/PB7。说明书记录地址 0x78,这是常见的 8 位写地址表示;对应 7 位地址通常为 0x3C。

OLED 模块接口位置和线序

SSD1306 OLED 与 I²C1 的连接
| 接口针脚 | 信号 | 连接 |
|---|---|---|
| 1 | GND | 电源地 |
| 2 | VCC | 3.3 V |
| 3 | SCL | PB6 / I2C1_SCL |
| 4 | SDA | PB7 / I2C1_SDA |
地址表示法
不要在驱动中混用 7 位地址 0x3C、8 位写地址 0x78 和 HAL 已左移参数。先确认 API 需要哪一种表示法,再在整个工程中统一。
共用 I²C1 的访问规则
AHT20 与 OLED 地址不同,可以共享总线。裸机程序应避免在一次事务中途切换设备;进入 FreeRTOS 后,多个任务访问同一 I²C 句柄时使用互斥锁,或集中到一个设备服务任务。
最小验证顺序
- 读取 BMI270 芯片 ID,再加载配置并观察静止原始值。
- 用 I²C 设备就绪检查分别确认
0x38与0x3C。 - 读取一次 AHT20 状态与测量值。
- 让 OLED 清屏并显示固定字符串。
- 最后再组合传感器采样、界面刷新和 RTOS 任务。
对应实验:I²C AHT20、I²C OLED、SPI BMI270。