STM32 物联网智能家居 (六) OLED显示设备

STM32 物联网智能家居 (六) OLED显示设备

OLED(Organic Light-Emitting Diode,有机发光二极管)显示屏是一种常见的显示技术,广泛应用于智能手机、智能手表、嵌入式设备等。下面我们来讲解设备子系统中的OLED显示设备,本节我们不讲解OLED的基本原理,只展示OLED作为设备子系统的编程思路。

一、显示设备概况

如下图所示,我们使用的OLED屏SSD1306是单色屏,像素点只有点亮和熄灭两种状态。并且其内置显存:SSD1306 自带 GDDRAM(Graphic Display Data RAM),用于存储显示数据。此款OLED屏采用I2c进行通信。

目前该项目使用的是带有内置显存的OLED屏,其中STM32 F103通过I2c写入OLED显示屏的显存中。如下图所示,显存在OLED中,通过I2c将数据写在显存中,就可以控制OLED显示相应的文字或动画。

但是很多TFT LCD本身是没有显存的,那么数据保存在哪里?可以在系统内存里分配一块空间,它就是显存。设置好LCD控制器后,它就会自动从显存取出数据、发送给LCD。我们只需要写数据到显存即可。

有些LCD含有显存,并且CPU可以直接访问显存:就像访问一般内存一样访问显存。我们只需要写数据到显存即可。

对于软件来说,这3种LCD都有显存,第1种无法直接写显存;第2、3种可以直接写显存。在软件的设计思想中,我们设想的是这些能否统一?来减少软件开发的复杂度和重复性。

对于第1种LCD,能否也直接写显存?回答是可以,我们可以按照下面的方法来将三种类型进行统一,并如下图所示:

  • 在系统内存分配另一个"显存FB"
  • 软件直接写"显存FB"
  • 在通过I2C把"显存FB"的内容传送到LCD自带的显存。

二、显示设备的结构体抽象

怎么抽象出一个显示设备?

  • 有初始化函数
  • 有显存,怎么描述显存?
    • 起始地址
    • 分辨率
    • 每个像素用多少位来表示
  • 对于第1种LCD,还需要一个Flush函数,把"显存FB"的内容"刷"到LCD的显存去

结构体如下:

这个结构体中,我们包含了显示设备的名字,显存的地址,X方向、Y方向的分辨率,像素块大小,硬件初始化函数、把数据刷到显存中、设置彩色像素点。

三、程序层次结构

下面是整个显示子系统的程序层次,分为如下五层,从上到下层层调用,最终调用到和芯片相关的硬件抽象层HAL。

四、编程实践

1. 测试OLED代码

2. 显示设备管理层

3. 设备层

核心是底下的oled_device.c,它要构造出一个DisplayDevice。

我们先实现它,再去考虑管理的事情。

3.1 构造DisplayDevice

文件:oled_device.c

3.2 Init和Flush

OLEDDeviceInitOLEDDeviceFlush比较简单,都是调用下面KAL层的函数:

3.3 SetPixel函数

需要计算的就是,(iX, iY)在显存里哪个位置、哪个bit,

代码如下:

4. 内核抽象层

文件:kal_oled_device.c

核心思路就是根据配置项,调用对应的函数。代码如下:

5.芯片抽象层

文件:cal_oled_device.c

核心思路就是根据配置项,调用对应的函数。代码如下:

6. 硬件抽象层

五、测试

下面我们将上面的程序刷写到板子中,可以看到在OLED显示屏中显示一个十字线。至此我们的OLED显示子设备的程序框架就搭建完成了。后面我们继续风扇子系统的讲解。

六、往期文章

STM32 物联网智能家居 (一) 方案设计STM32+ESP8266+TCP/UDP/MQTT

STM32 物联网智能家居 (二)-开发环境及工程搭建(STM32CubeMX)

STM32 物联网智能家居 (三) 输入子系统

STM32 物联网智能家居 (四) 设备子系统之分层框架

STM32 物联网智能家居 (五) 设备子系统之点亮LED灯

STM32 BootLoader 刷新项目 (一) STM32CubeMX UART串口通信工程搭建

STM32 BootLoader 刷新项目 (二) 方案介绍

STM32 BootLoader 刷新项目 (三) 程序框架搭建及刷新演示

STM32 BootLoader 刷新项目 (四) 通信协议

STM32 BootLoader 刷新项目 (十三) Python上位机介绍

STM32 BootLoader 刷新项目 (十四) 所有源代码获取

BootLoader串口刷新

相关推荐
我先去打把游戏先2 小时前
ESP32学习笔记(基于IDF):IOT应用——WIFI连接
笔记·单片机·嵌入式硬件·mcu·物联网·学习·esp32
云里物里2 小时前
云里物里智能物联电子标签系统助力零售品牌力提升
物联网·零售·电子价签·esl电子标签·电子标签
北京耐用通信3 小时前
破解工业通信瓶颈:耐达讯自动化Modbus转Profinet网关连接驱动器的奥秘
人工智能·物联网·网络协议·自动化·信息与通信
清风6666664 小时前
基于单片机的简易智能衣架控制系统设计
单片机·嵌入式硬件·毕业设计·课程设计
北京耐用通信4 小时前
电力自动化新突破:Modbus如何变身Profinet?智能仪表连接的终极解决方案
人工智能·物联网·网络安全·自动化·信息与通信
酷飞飞4 小时前
I2C软实现基于GD32F407VE的天空星的配置
单片机·嵌入式硬件
充哥单片机设计5 小时前
【STM32项目开源】基于STM32的人体健康监测系统
stm32·单片机·嵌入式硬件
hazy1k5 小时前
51单片机基础-独立按键
stm32·单片机·嵌入式硬件·51单片机
青岛前景互联信息技术有限公司6 小时前
前景互联应急救援指挥平台接入大疆机场3无人机
物联网·无人机·智慧城市
文火冰糖的硅基工坊7 小时前
[创业之路-702]:“第三次”与“第四次工业革命”的范式跃迁
大数据·人工智能·科技·嵌入式硬件·架构·嵌入式·gpu