STM32F103 驱动I2C的OLED屏
STM32F103C8T6 最小系统开发板使用 HAL 库驱动 I2C OLED 屏
1. 项目概述
在本项目中,我们将使用 STM32F103C8T6 最小系统开发板,通过 HAL(Hardware Abstraction Layer)库 驱动 I2C OLED 屏(128x64 SSD1306),并在屏幕上显示字符和图像。
2. 硬件设计
1. 硬件需求
- STM32F103C8T6 最小系统开发板
- STLink-V2 下载器(用于烧录程序)
- 128x64 I2C OLED 屏(SSD1306 驱动芯片)
- 杜邦线
2. 硬件连接
- STM32F103C8T6 I2C1_SCL(PB6) → OLED SCL
- STM32F103C8T6 I2C1_SDA(PB7) → OLED SDA
- GND → GND
- 3.3V → VCC
3. I2C 协议原理
I2C(Inter-Integrated Circuit)是一种 双线串行通信协议,主要特点:
- 主从架构:主设备(STM32)控制从设备(OLED)。
- 时钟同步:SCL 负责数据传输时序。
- 双向数据传输:SDA 传输数据。
- 地址寻址:每个 I2C 设备都有唯一地址(SSD1306 默认地址 0x3C)。
4. 软件设计
1. STM32 HAL 库简介
HAL 库是 ST 官方提供的 硬件抽象库,封装了底层寄存器操作,使开发更加简单。
2. 工程创建步骤(基于 STM32CubeMX)
- 打开 STM32CubeMX,创建新工程,选择 STM32F103C8T6。
- 配置 I2C1 接口
- PB6 设为 I2C1_SCL
- PB7 设为 I2C1_SDA
- 模式选择 Fast Mode (400kHz)
- 时钟配置(默认 72MHz,无需修改)。
- 生成代码,选择 IDE 为 STM32CubeIDE 或 Keil。
5. 代码实现
1. main.c 代码
#include "main.h"
#include "ssd1306.h"
I2C_HandleTypeDef hi2c1;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_I2C1_Init(void);
int main(void)
{
HAL_Init(); // 初始化系统时钟、时钟源、时钟分频等
SystemClock_Config(); // 初始化时钟
MX_GPIO_Init(); // 初始化 GPIO
MX_I2C1_Init(); // 初始化 I2C1
SSD1306_Init(); // 初始化 OLED
SSD1306_Clear();
SSD1306_GotoXY(10, 10);
SSD1306_Puts("Hello STM32!", &Font_7x10, 1);
SSD1306_UpdateScreen();
while (1)
{
HAL_Delay(1000);
}
}
static void MX_I2C1_Init(void)
{
hi2c1.Instance = I2C1; // 选择 I2C1
hi2c1.Init.ClockSpeed = 400000; // 设置时钟频率为 400kHz
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; // 设置时钟频率为 400kHz
hi2c1.Init.OwnAddress1 = 0; // 不设置own address
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; // 设置7位地址模式
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; // 不使用dual address mode
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; // 不使用general call mode
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; // 不使用stretch mode
HAL_I2C_Init(&hi2c1); // 初始化 I2C1
}
2. 代码解析
- SSD1306_Init():初始化 OLED 屏幕。
- SSD1306_GotoXY(x, y):设置光标位置。
- SSD1306_Puts():在 OLED 屏幕上显示文本。
- SSD1306_UpdateScreen():刷新屏幕。
6. 烧录与测试
1. 烧录步骤(使用 STLink-V2)

- 连接 STLink-V2
- STLink-V2 SWDIO → STM32 SWDIO
- STLink-V2 SWCLK → STM32 SWCLK
- STLink-V2 GND → STM32 GND
- STLink-V2 3.3V → STM32 3.3V
- 使用 STM32CubeProgrammer 或 Keil 进行烧录。
- 烧录完成后,按下 RESET 运行程序。
2. 观察 OLED 显示
- OLED 屏幕应显示 "Hello STM32!"
- 若屏幕无显示,检查 I2C 连接。
7. 总结
本教程介绍了 STM32F103C8T6 最小系统开发板 使用 HAL 库驱动 I2C OLED 屏,包括 I2C 协议原理、硬件设计、软件配置、代码编写、烧录步骤,适用于 STM32 HAL 库 开发。希望能帮助你快速入门 STM32 的 I2C OLED 屏应用!

浙公网安备 33010602011771号