OLED(Organic Light Emitting Diode)显示屏因其轻薄、响应速度快、视角宽、色彩鲜艳等特点,在嵌入式系统中得到广泛应用。本文将详细介绍如何使用STM32微控制器通过I2C接口驱动OLED显示屏,并提供完整的代码实现。
OLED模块简介
OLED显示屏是一种自发光显示技术,具有轻薄、低功耗、响应速度快等特点。在STM32平台上,通常使用I2C接口与OLED显示屏进行通信。
硬件连接
将OLED显示屏与STM32开发板进行硬件连接,通常包括以下步骤:
- VCC:连接到STM32的3.3V或5V电源。
- GND:连接到STM32的地。
- SCL:连接到STM32的I2C时钟线(例如PB6)。
- SDA:连接到STM32的I2C数据线(例如PB7)。
软件编程
1. 初始化I2C
首先,需要初始化STM32的I2C接口,以便与OLED显示屏通信。
#include "stm32f1xx_hal.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();
MX_I2C1_Init();
// 初始化OLED显示屏
OLED_Init();
while (1) {
// 在OLED上显示字符串
OLED_ShowString(0, 0, "Hello, OLED!");
HAL_Delay(1000);
}
}
static void MX_I2C1_Init(void) {
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 100000;
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c1.Init.OwnAddress1 = 0;
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c1.Init.OwnAddress2 = 0;
hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
HAL_I2C_Init(&hi2c1);
}
2. OLED驱动函数
实现OLED的初始化和数据发送函数。
#include "oled.h"
#define OLED_ADDR 0x78 // OLED I2C地址
void OLED_WR_CMD(uint8_t cmd) {
HAL_I2C_Mem_Write(&hi2c1, OLED_ADDR, 0x00, I2C_MEMADD_SIZE_8BIT, &cmd, 1, 1000);
}
void OLED_WR_DATA(uint8_t data) {
HAL_I2C_Mem_Write(&hi2c1, OLED_ADDR, 0x40, I2C_MEMADD_SIZE_8BIT, &data, 1, 1000);
}
void OLED_Init(void) {
// 发送初始化命令
OLED_WR_CMD(0xAE); // 关闭显示
// 其他初始化命令...
OLED_WR_CMD(0xAF); // 打开显示
}
void OLED_ShowString(uint8_t x, uint8_t y, char *str) {
// 显示字符串
while (*str) {
OLED_WR_CMD(0xB0 + y); // 设置页地址
OLED_WR_CMD(0x00 + x); // 设置列地址低字节
OLED_WR_CMD(0x10 + ((x + 8) % 128)); // 设置列地址高字节
while (x < 128 && *str) {
OLED_WR_DATA(*str++);
x += 6;
}
}
}
注意事项
- I2C地址:确保OLED的I2C地址与代码中的设置一致。
- 电源稳定性:确保OLED的电源稳定,避免电压波动影响显示效果。
- 数据校验:每次读取数据后,进行数据校验以确保数据的准确性。
通过上述步骤,我们可以在STM32上使用I2C接口成功驱动OLED显示屏,并实现基本的显示功能。这为开发需要图形显示的嵌入式系统提供了基础。
✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进
❤欢迎关注我的知乎:对error视而不见
代码获取、问题探讨及文章转载可私信。
☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。
标签:void,Init,STM32,OLED,hi2c1,模块,I2C From: https://blog.csdn.net/weixin_66608063/article/details/143696943