9.5 I²C通信项目:OLED显示"Hello World"

# 9.5 I²C通信项目:OLED显示"Hello World"

本实验通过STM32的I²C协议驱动OLED屏幕,实现"Hello World"字符串显示。
技术要点

  • I²C外设配置与初始化
  • OLED驱动库集成
  • 屏幕刷新与字符绘制

# 9.5.1 STM32CubeMX配置

# 1. 工程基础配置

  1. 新建工程,选择芯片STM32F103C8T6,命名工程为09 I2C
  2. 启用外部高速晶振(HSE),配置系统主频为72MHz。

# 2. 配置I²C1外设

  1. 进入Pinout & ConfigurationConnectivity → 双击I2C1启用。
  2. 参数设置
    • 模式:标准模式
    • 时钟频率:100kHz
    • 地址模式:7位
配置I2C1

# 3. 生成代码

  1. Project Manager中勾选“为外设生成独立文件”。
  2. 点击生成代码并打开工程。

# 9.5.2 I²C项目软件设计

# 1. I²C初始化

STM32CubeMX自动生成I²C初始化函数MX_I2C1_Init(),关键配置如下:

void MX_I2C1_Init(void) {
  hi2c1.Instance = I2C1;
  hi2c1.Init.ClockSpeed = 100000;      // 100kHz时钟
  hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
  hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  // ...其他参数保持默认
  HAL_I2C_Init(&hi2c1);               // 初始化I²C
}
1
2
3
4
5
6
7
8

# 2. 添加OLED驱动库

  1. oled.cfont.c(字符库)复制到工程Core/Src目录。
  2. main.c中引入头文件:
#include "oled.h"
#include "font.h"
1
2

# 3. 主程序逻辑

  1. 初始化OLED
HAL_Delay(20);      // 等待硬件稳定
OLED_Init();        // 初始化屏幕
1
2
  1. 主循环显示
while (1) {
  OLED_NewFrame();  // 清空显存
  OLED_PrintString(1, 1, "Hello World", &font16x16, OLED_COLOR_NORMAL);
  OLED_ShowFrame(); // 刷新显示
}
1
2
3
4
5

# 9.5.3 I²C项目下载验证

  1. 确保调试接口设置为Serial Wire
  2. 编译代码并烧录至开发板。
  3. 现象:OLED首行显示"Hello World",无闪烁或残影。
I2C项目效果图

关键说明

  • I²C时钟频率需与OLED模块兼容(通常100kHz~400kHz)。
  • 字符库font.h需与OLED分辨率匹配(如16x16字体)。