聪聪哥哥 发表于 2025-9-1 15:11

【STM32U385RG 测评】05+动手IIC试验,驱动OLED屏幕

本帖最后由 聪聪哥哥 于 2025-9-1 15:11 编辑

由于之前操作做硬件的IIC屏幕,本款开发板也是没有找到屏幕的,今天移植一下OLED屏幕的驱动代码。

一:OLED知识分享
OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display, OELD)。因为具备轻薄、省电等特性,因此从 2003 年开始,这种显示设备在 MP3 播放器上得到了广泛应用,而对于同属数码类产品的 DC 与手机,此前只是在一些展会上展示过采用 OLED 屏幕的工程样品。自 2007 年后,寿命得 到很大提高,具备了许多 LCD 不可比拟的优势。
GND:电源地 VCC:2.2V~5.5V SCL(D0):CLK 时钟 (高电平 2.2V~5.5V) SDA(D1):MOSI 数据(高电平 2.2V~5.5V) RST:复位(高电平 2.2V~5.5V) D/C:数据/命令(高电平 2.2V~5.5V) 兼容 3.3V 和 5V 控制芯片的 I/O 电平(无需任何设置,直接兼容)。
二:STM32 cube MX软件配置如下所示:

三:软件代码编写:
底层驱动代码如下所示:
/***********************************************************************************************
* @brief   static unsigned char OLED_send_byteS(unsigned char *data, unsigned char length)
* @param    data:输入的数据length:长度值,使用硬件IIC底层驱动函数
* @retval无
* @author聪聪哥哥
* @version V1.1.0
* @date   25-5-2025
*************************************************************************************************/
static unsigned char OLED_send_byteS(unsigned char *data, unsigned char length)
{
        if (HAL_I2C_Master_Transmit(&hi2c1, 0x78, data, length, 2) != HAL_OK)
        {
                return 0;
        }
        return 1;
}

/***********************************************************************************************
* @brief   static void I2C_WriteByte(uint8_t addr, uint8_t value)
* @param    addr:IIC模块的地址,value :写入的数据
* @retval无
* @author聪聪哥哥
* @version V1.1.0
* @date   25-5-2025
*************************************************************************************************/
static void I2C_WriteByte(uint8_t addr, uint8_t value)
{
        unsigned char dta = {0};
        dta = addr;
        dta = value;
        OLED_send_byteS(dta, 2);
}

/***********************************************************************************************
* @brief   void WriteCmd(unsigned char I2C_Command)
* @param    I2C_Command : IIC的命令
* @retval无
* @author聪聪哥哥
* @version V1.1.0
* @date   25-5-2025
*************************************************************************************************/
void WriteCmd(unsigned char I2C_Command)
{
        I2C_WriteByte(0x00, I2C_Command);
}显示代码如下:
OLED_Init();
        OLED_ColorTurn(0);//0?????????1 ??????
OLED_DisplayTurn(0);//0??????? 1 ?????????
        OLED_Refresh();
        OLED_Clear();

        OLED_ShowCN(16, 0, 0);
        OLED_ShowCN(32, 0, 1);
        OLED_ShowCN(48, 0, 2);
        OLED_ShowCN(64, 0, 3);

        OLED_ShowCN(16, 2, 4);
        OLED_ShowCN(32, 2, 4);

        OLED_ShowCN(48, 2, 5);
        OLED_ShowCN(64, 2, 5);


        OLED_ShowStr(40, 4, (uint8_t *)test_str, 2);
        OLED_ShowStr(40, 6, (uint8_t *)test_str1, 2);
实物图片如下所示:

olivem55arlowe 发表于 2025-9-4 22:17

驱动OLED屏幕的代码实现包括引脚配置、IIC通信协议实现、OLED初始化序列及显示功能实现。

聪聪哥哥 发表于 2025-9-5 10:50

olivem55arlowe 发表于 2025-9-4 22:17
驱动OLED屏幕的代码实现包括引脚配置、IIC通信协议实现、OLED初始化序列及显示功能实现。 ...

使用硬件IIC 还是方便啊

albertaabbot 发表于 2025-9-6 21:35

SSD1306?               

claretttt 发表于 2025-9-9 20:10

开源 STM32 专用驱动吧            

聪聪哥哥 发表于 2025-9-10 10:16

claretttt 发表于 2025-9-9 20:10
开源 STM32 专用驱动吧

稍等,我传上来,硬件IIC

mikewalpole 发表于 2025-9-10 22:03

​标准模式IIC               

聪聪哥哥 发表于 2025-9-11 07:42

mikewalpole 发表于 2025-9-10 22:03
​标准模式IIC

啊,使用官方的硬件IIC驱动,还是蛮方便的

adolphcocker 发表于 2025-9-13 11:50

分辨率常见为 ​​128x64 或 128x32​​

claretttt 发表于 2025-9-13 18:13

通过中断机制异步处理 I²C 通信,避免阻塞主程序

maqianqu 发表于 2025-9-13 19:09

单色显示资源占用低,I2C接口仅占用2根线

sheflynn 发表于 2025-9-13 22:46

SSD1306驱动库            

聪聪哥哥 发表于 2025-9-14 10:18

sheflynn 发表于 2025-9-13 22:46
SSD1306驱动库

对的 

rosemoore 发表于 2025-9-14 12:32

使用 U8g2 库               

wilhelmina2 发表于 2025-9-14 14:00

初始化后屏幕可能呈现花屏            

聪聪哥哥 发表于 2025-9-14 16:34

wilhelmina2 发表于 2025-9-14 14:00
初始化后屏幕可能呈现花屏

清空一下就可以,适当加延时

hearstnorman323 发表于 2025-9-14 19:10

可以从GitHub或其他开源平台获取

聪聪哥哥 发表于 2025-9-15 08:04

hearstnorman323 发表于 2025-9-14 19:10
可以从GitHub或其他开源平台获取

对对,可以的

daichaodai 发表于 2025-9-15 08:32

以前ST的F103系列的硬件IIC有点小bug,导致很多工程师都不用硬件IIC,后来大家都习惯用软件模拟IIC了。
页: [1]
查看完整版本: 【STM32U385RG 测评】05+动手IIC试验,驱动OLED屏幕