这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » STM32F103驱动OLED

共1条 1/1 1 跳转至

STM32F103驱动OLED

高工
2026-02-20 09:14:31     打赏

STM32F103驱动OLED

在STM32F103上驱动OLED显示字符串和数字2026的完整实现方案如下:


一、硬件连接(以I2C接口为例)

OLED引脚

STM32F103引脚

功能

VCC

3.3V

供电(必须3.3V,不可接5V)

GND

GND

共地

SCL

PB6

I2C时钟线

SDA

PB7

I2C数据线



二、初始化配置(基于HAL库)

1.       使用STM32CubeMX配置I2C

步骤:

新建工程,选择芯片型号STM32F103C8Tx。

在Pinout & Configuration中启用I2C1(PB6/SCL,PB7/SDA)。

配置I2C参数:

模式:I2C Master Mode

时钟速度:100kHz(标准模式)

地址模式:7-bit

生成代码并打开工程。

2.       OLED初始化函数

#include "ssd1306.h"  // 假设使用SSD1306驱动芯片


void OLED_Init(void) {

// 初始化I2C

MX_I2C1_Init();


// OLED初始化命令序列(示例)

uint8_t init_cmds[] = {

0xAE, // 关闭显示

0x20, 0x00, // 设置内存地址模式为水平寻址

0x8D, 0x14, // 启用电荷泵

0xA4, // 恢复显示内容

0xAF  // 开启显示

};


for (uint8_t i = 0; i < sizeof(init_cmds); i++) {

HAL_I2C_Mem_Write(&hi2c1, 0x78 << 1, init_cmds[i], 1, NULL, 0, 10);

}

}


显示函数实现

1.       显示单个字符

void OLED_ShowChar(uint8_t x, uint8_t y, char ch, uint8_t size) {

uint8_t i, j;

uint8_t temp;

uint8_t x0 = x;


// 根据字体大小调整坐标

if (size == 8) {

x *= 6;

y *= 8;

} else if (size == 16) {

x *= 8;

y *= 16;

}


// 写入字符点阵数据(需提前定义字库,如ascii_code_8x16)

for (i = 0; i < size / 8; i++) {

for (j = 0; j < size; j++) {

if (size == 8) {

temp = ascii_code_8x16[(ch - 32) * 8 + i * 8 + j];

} else {

temp = ascii_code_16x16[(ch - 32) * 16 + i * 16 + j];

}

OLED_SetPos(y + i * 8, x0 + j);

HAL_I2C_Mem_Write(&hi2c1, 0x78 << 1, 0x40, 1, &temp, 1, 10);

}

}

}


显示字符串

// 显示英文字符串(第0行,第8列)

OLED_ShowString_F8X16(0, 8, "String:");


// 显示数字2026(第1行,第0列)

char num_str[10];

sprintf(num_str, "%d", 2026);

OLED_ShowString_F8X16(1, 0, num_str);


三、连接方式

84d0a43c-9686-4b8a-9274-aa49ebc97f8b.png

四、显示效果

f069e603abe8c8b53c06b297d59385f5.jpg





共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]