STM32CubeMX——OLED开发基础(HAL 库)

本文介绍了如何在STM32平台上通过SPI/IIC接口驱动0.96寸128x64分辨率OLED屏幕,包括接口配置、驱动库移植、数据准备及常用函数应用。详细步骤包括OLED模块配置、底层驱动函数的修改与调用,以及中文字符和图片的显示方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、开发基础概述:

1、0.96 寸 OLED 模块接口定义:

SPI 接口模块

  1. GND   电源地
  2. VCC   电源正(3 ~ 5.5V)
  3. D0    OLED 的 D0 脚,在 SPI 和 IIC 通信中为时钟管脚
  4. D1    OLED 的 D1 脚,在 SPI 和 IIC 通信中为数据管脚
  5. RES    OLED 的 RES 管脚,用于复位(低电平复位)
  6. DC    OLED 的 D/C 管脚,数据和命令控制管脚
  7. CS    OLED 的 CS 管脚,片选管脚

IIC 接口模块:

  1. GND   电源地
  2. VCC   电源正(3 ~ 5.5V)
  3. SCL    OLED 的 D0 脚,在 SPI 和 IIC 通信中为时钟管脚
  4. SDA    OLED 的 D1 脚,在 SPI 和 IIC 通信中为数据管脚

2、0.96寸 OLED 模块 128×64 分辨率解析:

在这里插入图片描述

0.96寸 OLED(128×64分辨率)模块,128×64分辨率即 OLED 显示横坐标有 128 个像素格纵坐标有 64 个像素格,但是由于 OLED 不能一次控制一个点阵,只能控制 8 个点阵,而且是垂直方向扫描控制,因此垂直方向坐标可选为 0~7 页(一页 8 个像素格)水平方向可选坐标 0~128一般一个中文字体占 16×16 个像素格字母以及符号占 8×16 个像素格

3、基于 STM32 的 OLED 应用,需要做哪些事情:

  1. 移植 OLED 的底层驱动函数库
  2. 准备需要的中文字符和图片等数据
  3. 调用 OLED 驱动库中的底层函数进行应用开发

二、STM32CubeMX 配置:

1、此处我们使用 SPI 接口,接线如图:

在这里插入图片描述

2、STM32CubeMX 配置:

在这里插入图片描述
PB12PB13PB14PB15均设置为 GPIO 输出功能


三、

1、移植 OLED 的底层驱动函数库:

① 将 4 个驱动文件拷贝到工程文件(和main.c同一目录)中,将oled.c文件添加到工程代码文件中,并在main.c中引入oled.h头文件(.c.h文件的文件名根据自己手上的驱动文件而不同,可以来自淘宝商家、技术社区等)

示例文件:
在这里插入图片描述
在这里插入图片描述
main.c中引入oled.h头文件:
在这里插入图片描述


② 根据所选用的芯片型号,修改oled.h头文件中所用的芯片的头文件:

在这里插入图片描述头文件名可以参考main.h中的头文件


③ 根据电路原理图,修改oled.h中 OLED 的引脚定义:

在这里插入图片描述并检查其余定义是否正确


④ 查看OLED_Init(void)初始化函数的源码,根据电路接口和应用需要进行修改:
void OLED_Init(void)
{
   
	GPIO_InitTypeDef GPIO_InitStruct;
	
	__HAL_RCC_GPIOB_CLK_ENABLE();

	//CS
	GPIO_InitStruct.Pin = OLED_CS_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(OLED_CS_GPIO, &GPIO_InitStruct);

	//DC
	GPIO_InitStruct.Pin = OLED_DC_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(OLED_DC_GPIO, &GPIO_InitStruct);

	//SCLK
	GPIO_InitStruct.Pin = OLED_SCLK_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(OLED_SCLK_GPIO, &GPIO_InitStruct);

	//SDIN
	GPIO_InitStruct.Pin = OLED_SDIN_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(OLED_SDIN_GPIO, &GPIO_InitStruct);

	HAL_GPIO_WritePin(OLED_CS_GPIO, OLED_CS_GPIO_PIN, GPIO_PIN_SET);
 	HAL_GPIO_WritePin(OLED_DC_GPIO, OLED_DC_GPIO_PIN, GPIO_PIN_SET);
	HAL_GPIO_WritePin(OLED_SCLK_GPIO, OLED_SCLK_GPIO_PIN, GPIO_PIN_SET);
	HAL_GPIO_WritePin(OLED_SDIN_GPIO, OLED_SDIN_GPIO_PIN, GPIO_PIN_SET);

2、准备需要的中文字符和图片等数据:

使用取字模软件 PCtoLCD2002<

评论 53
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~莘莘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值