首页 > 其他分享 >STM32—OLED模块

STM32—OLED模块

时间:2024-11-11 22:20:19浏览次数:3  
标签:void Init STM32 OLED hi2c1 模块 I2C

OLED(Organic Light Emitting Diode)显示屏因其轻薄、响应速度快、视角宽、色彩鲜艳等特点,在嵌入式系统中得到广泛应用。本文将详细介绍如何使用STM32微控制器通过I2C接口驱动OLED显示屏,并提供完整的代码实现。

OLED模块简介

OLED显示屏是一种自发光显示技术,具有轻薄、低功耗、响应速度快等特点。在STM32平台上,通常使用I2C接口与OLED显示屏进行通信。

硬件连接

将OLED显示屏与STM32开发板进行硬件连接,通常包括以下步骤:

  1. VCC:连接到STM32的3.3V或5V电源。
  2. GND:连接到STM32的地。
  3. SCL:连接到STM32的I2C时钟线(例如PB6)。
  4. 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;
        }
    }
}

注意事项

  1. I2C地址:确保OLED的I2C地址与代码中的设置一致。
  2. 电源稳定性:确保OLED的电源稳定,避免电压波动影响显示效果。
  3. 数据校验:每次读取数据后,进行数据校验以确保数据的准确性。

通过上述步骤,我们可以在STM32上使用I2C接口成功驱动OLED显示屏,并实现基本的显示功能。这为开发需要图形显示的嵌入式系统提供了基础。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

标签:void,Init,STM32,OLED,hi2c1,模块,I2C
From: https://blog.csdn.net/weixin_66608063/article/details/143696943

相关文章

  • wifi模块使用主控输出的32k时钟
    soc:rk3568WiFi模块需要的32.768K时钟,有三种时钟源,rk809和8563提供,或者使用主控输出的。 dts修改如下:&wireless_bluetooth{compatible="bluetooth-platdata";-clocks=<&rk8091>;+clocks=<&cruSCLK_32K_IOE>;clock-n......
  • 基于ESP32的桌面小屏幕实战[3]:硬件设计之主控模块、墨水屏和TP、USB转串口、蜂鸣器、
    1.主控模块主控用的是ESP32-S。在立创商城搜索它,找到ESP32-S,复制编号。回到嘉立创EDA,用编号搜原件。把原件放置在原理图中。按照之前的外设接口说明接线。注意,给引脚命名的时候,要单击鼠标右键,点击属性,在名称处编辑。打开这个芯片的数据手册,找到外围设计原理图。参......
  • 暂时关闭EXTI外部中断的一个坑 HK32(stm32没有测试过)
    一开始的外部中断是通过这个宏函数来关闭的和开启#defineDisableEXTI_Key()(EXTI->IMR&=~((1<<KEY1_Pin)+(1<<KEY2_Pin)+(1<<KEY3_Pin)))//PA0、PC2、3#defineEnableEXTI_Key()(EXTI->IMR|=((1<<KEY1_Pin)+(1<<KEY2_Pin)+(1<<KEY3_Pin)))......
  • STM32CubeMX:使用DAC输出正弦波的三种方法(while,定时器中断,DMA)
    1.DAC概念简介:DAC的工作原理是根据数字输入信号的数值,生成相应的模拟输出电压或电流。它通常接收一个二进制数字输入,该数字代表了一个特定的数值范围。DAC通过将这个数字值转换为模拟信号的电压或电流水平来输出。(功能与ADC相反)2.正弦波输出方式1:简单粗暴while循环输出Cub......
  • 模块二:central cache实现
    一、centralcache介绍结构也是一个哈希桶,大小划分和threadcache哈希桶一样,区别在于挂的不是自由链表而是span链表,里面连接了许多span二、span介绍1、实现思路span就是centralcache向pagecache申请的大块内存,由一个个页(大小4KB)组成。span链表是一个带头双向......
  • 黑马PM- B端产品-客服模块设计
    语料库管理机器人智能客服人工客服功能设计客服系统数据管理及基础设置......
  • WIFI模块中AP模式和STA模式是什么
    1.AP模式(AccessPoint):AP模式即无线接入点模式,是一个无线网络的创建者,是网络的中心节点。一般家庭或办公室使用的无线路由器就是一个AP。功能:在AP模式下,设备充当无线网络的中心节点,负责管理无线网络,包括广播SSID(服务集标识符),管理连接的客户端设备,以及提供数据传输的中继点。客......
  • stm32 HAL 添加 FREERTOS系统(使用stm32cubemx)
    #学习笔记,留存#1.ClockConfiguration(时钟配置)​​​​​​​HSE,LSE选择外部晶振系统时钟选择TIM6,systick(滴答时钟)给FREERTOS用根据自己的芯片配置时钟(我用的是stm32f103zet6)AHB总线72MHZAPB1总线36MHZ APB2总线72MHZ2.ADDFREERTOS(添加实时系统)在Pinout&Co......
  • OpenMV与STM32之间的通信(附源码)
    在嵌入式项目中,经常需要将图像处理单元(如OpenMV)与微控制器(如STM32)相结合,以实现更复杂的功能。本文将详细介绍如何通过串口通信实现OpenMV与STM32之间的数据传输。OpenMV与STM32通信基础OpenMV是一款专为机器视觉设计的微控制器,它内置了图像传感器和强大的图像处理算法。ST......
  • STM32+TMC2209控制步进电机正反转
    TMC2209是一款由Trinamic公司生产的高性能步进电机驱动器芯片,它支持SPI通信接口,能够实现精准的步进电机控制。本文将详细介绍如何使用STM32微控制器结合TMC2209驱动器来控制步进电机的正反转。TMC2209特点高精度控制:支持步进角为0.9°、1.8°、3.6°等多种细分设置。SPI接......