STM32F103入门实战:从零搭建智能手环原型(基于野火指南者开发板)
当你第一次拿到野火指南者开发板时,可能会被这块小小的电路板上密密麻麻的元器件所震撼。但别担心,这正是嵌入式开发的魅力所在——用代码赋予硬件生命。本文将带你从零开始,用STM32F103打造一个功能完整的智能手环原型,涵盖OLED显示、运动传感器数据采集和蓝牙通信三大核心模块。
1. 硬件准备与环境搭建
在开始编码之前,我们需要先了解整个项目的硬件组成。野火指南者开发板搭载的是STM32F103VET6芯片,这是一颗基于Cortex-M3内核的32位微控制器,具有512KB Flash和64KB RAM,完全足够支撑智能手环的基础功能实现。
所需硬件清单:
- 野火指南者开发板(STM32F103VET6核心)
- 0.96寸OLED显示屏(SSD1306驱动,I2C接口)
- MPU6050六轴运动传感器模块
- HC-05蓝牙模块
- 杜邦线若干
- Micro USB数据线
开发环境我们选择Keil MDK,这是STM32开发最常用的IDE之一。安装完成后,还需要配置以下工具链:
bash复制# 安装STM32CubeMX(用于生成初始化代码)
wget https://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-configurators-and-code-generators/stm32cubemx.html
# 安装ST-Link驱动(用于程序烧录)
wget https://www.st.com/en/development-tools/stsw-link009.html
提示:初次使用Keil时,记得安装STM32F1系列的Device Family Pack,否则无法识别芯片型号。
硬件连接示意图如下:
| 模块 | 开发板接口 | 引脚功能 |
|---|---|---|
| OLED SCL | PB6 | I2C1_SCL |
| OLED SDA | PB7 | I2C1_SDA |
| MPU6050 SCL | PB10 | I2C2_SCL |
| MPU6050 SDA | PB11 | I2C2_SDA |
| HC-05 TX | PA9 | USART1_TX |
| HC-05 RX | PA10 | USART1_RX |
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. OLED显示模块驱动
OLED作为智能手环的主要显示界面,需要实现时间、步数等信息的可视化呈现。我们使用的SSD1306驱动芯片通过I2C接口通信,最高支持128x64的分辨率。
首先在STM32CubeMX中配置I2C1外设:
- 开启I2C1模式为"I2C"
- 时钟速度设为400kHz(Fast Mode)
- PB6和PB7引脚自动配置为I2C功能
生成代码后,需要编写OLED的驱动层。这里我们采用硬件I2C而非软件模拟,以提高刷新效率:
c复制// OLED初始化序列
void OLED_Init(void) {
HAL_Delay(100);
OLED_WriteCmd(0xAE); // 关闭显示
OLED_WriteCmd(0xD5); // 设置时钟分频
OLED_WriteCmd(0x80);
OLED_WriteCmd(0xA8); // 设置多路复用率
OLED_WriteCmd(0x3F);
// ... 其他初始化命令
OLED_WriteCmd(0xAF); // 开启显示
}
// 在指定位置显示字符串
void OLED_ShowString(uint8_t x, uint8_t y, char *str) {
uint8_t j=0;
while(str[j]!='\0') {
OLED_ShowChar(x+j*8,y,str[j]);
j++;
}
}
实际项目中,我们可以创建一个显示任务,周期性地更新屏幕内容:
c复制void Display_Task(void) {
static uint32
