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);
三、连接方式

四、显示效果

我要赚赏金
