STM32的HAL库开发---OLED

目录

一、OLED显示屏介绍

二、OLED显示屏驱动原理

三、OLED驱动芯片简介 

 四、字符显示原理

五、OLED基本驱动步骤

六、OLED编程实战

一、OLED显示屏介绍

常见显示屏:LCD显示屏、点阵显示屏、OLED显示屏。LCD显示屏最常见,技术成熟。

OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机激光显示(Organic Electroluminesence Display)。

OLED显示屏就是利用有机发光二极管制成的显示屏,只要在正负极上加上正确的电压就会发光。

LCD有背光层,显示黑色不那么明显,而OLED就是把所有的发光二极管都关闭,就是很明显的黑色。

ATK_OLED模块是一块小尺寸(0.96寸)、高亮、自带升压电路的高性能OLED显示模块,分辨率为128 * 64,采用SSD1306驱动IC,该芯片内部集成DCDC升压,仅需3.3V供电。0.96英寸指的是对角线0.96英寸。

模块支持86800并口、88080并口、4线SPI以及IIC4种通信接口。通过BS1和BS2选择通信接口。

更改通信接口需要将BS1和BS2的焊盘更改高低电平。 

通过BS1和BS2选择

引脚说明:

  1CSOLED片选信号(低电平有效) 

  2WR:向OLED写入数据

  3RD:向OLED读取数据

  4D[7:0]8位双向数据线

  5RST(RES):硬复位OLED(低电平有效)

  6DC:数据/命令标志(0,命令;1,数据)这个有可能还叫RS,低电平为命令,高电平为数据。 

二、OLED显示屏驱动原理

OLED屏驱动的核心是:驱动OLED驱动芯片

通过驱动IC的列地址和行地址,就可以锁定一个点,如果想让这个点亮,就置1,灭就置0。

如何驱动屏幕:

1、选择驱动芯片时序 8080时序,根据时序实现数据写入/读取,通过时序就可以跟驱动IC建立通信关系了。

2、初始化时许,由厂家提供,用于初始化屏幕

3、实现画点函数、读点函数(可选)

SSD1306工作时序(8080时序):

并口总线时序,常用于屏幕驱动IC的访问,由Intel提出,也叫英特尔总线。

总要进行读和写:读数据、读命令、写数据、写命令。

8080并口读/写的过程
1、设置DC为高(数据)/低(命令)DC引脚  根据写入/读取的数据类型
2、拉低片选CS引脚  选中SSD1306
3、设置RD/WR为低  根据是读数据还是写数据

4、拉高RD/WR,出现上升沿,在RD的上升沿,使数据锁存到数据线D[7:0]上,在WR的上升沿,使数据写入到SSD1306里。

写时许:

首先是设置DC引脚电平,根据是数据还是命令进行设置,然后拉低CS线,写数据所以将WR线拉低,然后准备数据,对数据线进行操作,然后将WR引脚再拉到,也就是打算写的时候将WR拉低,准备好数据后,将WR拉高,这样就出现了上升沿,这时候数据就写入到SSD1306里边。然后释放CS和DC信号线,在这个过程中,由于没有读数据,所以RD信号线可以保持高电平。 

 其中第一行就是操作DC引脚的,根据参数cmd看是数据还是命令。其他就是正常按上面说的步骤操作就可以。其中oled_data_out(data);是对数据线进行操作,具体函数如下:

其中GPIO的ODR寄存器是控制输出的,数据线有8位,由PC0~PC7控制,首先将ODR寄存器与OXRR00与,将低8位都清零,然后再使用数据data与OX00FF与得到数据的低8位,将这低8位与ODR寄存器或操作,即可实现数据位控制。

三、OLED驱动芯片简介 

用于控制OLED的显示功能和效果。SSD1306指令比较多,下面是常用的。

STM32 OLED屏幕显示通常通过HAL(High-level Abstraction Layer)来操作,这是因为 HAL 提供了硬件抽象层,简化了对STMicroelectronics系列微控制器(如STM32)连接外设的复杂性,包括OLED显示屏。在STM32中,OLED屏幕的控制涉及到SPI通信(对于许多常见的I2C OLED不太常见),因此你会使用相应的HAL SPI驱动来初始化和配置SPI接口。 以下是使用STM32 OLED显示模块的一般步骤: 1. **初始化**: 首先,在工程中包含必要的头文件并初始化HAL,然后选择合适的HAL SPI实例和OLED设备。 ```c #include "stm32f4xx_hal.h" #include "stm32f4xx_hal_oled.h" void OLED_Init(void) { OLED_HandleTypeDef hOLED; // 初始化SPI,并设置GPIO用于SCK、MISO、MOSI和CS引脚 } ``` 2. **配置设备**: 设置OLED的起始地址、宽度、高度等参数。 ```c hOLED.Instance = OLED_SPI_INSTANCE; hOLED.Init.Width = OLED_WIDTH; hOLED.Init.Height = OLED_HEIGHT; hOLED.Init.DMA = OLED_DMA_ENABLE; // ...其他设置... HAL_OLED_Init(&hOLED); ``` 3. **数据传输**: 使用`HAL_OLED_WriteCommand()`和`HAL_OLED_WriteData()`函数发送命令和数据到屏幕。 ```c uint8_t buffer[] = {0x01, 0x02, 0x03}; // 一些OLED指令数据 HAL_OLED_WriteCommand(hOLED, buffer, sizeof(buffer)); HAL_Delay(10); // 等待命令处理完成 ``` 4. **显示图像**: 对于彩色屏,需要发送RGB数据,而黑白屏则只需发送单色数据。 5. **刷新屏幕**: 结束数据传输后,可能需要调用`HAL_OLED_ToggleDisplay()`来显示内容,或定期调用此函数来保持屏幕更新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值