it编程 > 硬件开发 > stm32

探索STM32与OLED显示屏:SSD1306库使用指南与实战

79人参与 2024-08-06 stm32


探索stm32与oled显示屏:ssd1306库使用指南与实战


摘要

在嵌入式系统设计中,显示屏作为人机交互的重要界面,对于提升用户体验至关重要。本文聚焦于stm32微控制器与oled显示屏的集成应用,特别是采用afiskon开发的stm32-ssd1306库对基于ssd1306sh1106sh1107ssd1309的oled显示屏进行移植和操作。这些显示屏以其轻薄、低功耗、高对比度等优点在多种应用场景中受到青睐。

本教程将为读者提供一份全面的指南,从硬件选择到软件,一步步指导如何在stm32微控制器上实现oled显示屏的驱动。不仅涵盖了基于i2c和spi通信协议的显示屏集成,还详细介绍了如何利用stm32-ssd1306库简化开发流程,实现高效的显示操作。

在硬件方面,我们将讨论stm32开发板与oled显示屏之间的连接方法,并提供详细的引脚功能说明。软件部分,本教程将指导读者安装必要的软件工具,包括keil uvision5、stm32 hal库和cubemx,以及如何从github获取并集成stm32-ssd1306库。

此外,本文还将深入探讨如何在keil uvision5中配置项目,包括时钟源设置、gpio配置、spi接口设置等关键步骤。通过实际代码示例,我们将展示如何初始化oled显示屏,以及如何使用库提供的api进行基本显示操作,如清除屏幕、绘制像素和显示字符串。

通过本教程的学习,读者将能够掌握stm32与oled显示屏集成的关键技术,并能够自行设计和实现基于这些组件的嵌入式系统。本研究不仅为嵌入式系统开发者提供了实用的技术参考,也为电子爱好者提供了深入学习的平台。

关键词

stm32, oled显示屏,ssd1306,i2c,spi,嵌入式系统,stm32-ssd1306


材料清单

硬件连接

oled模块引脚说明

0.96寸ssd1306 oled模块的引脚如下:

连接到stm32

将oled模块的引脚连接到stm32开发板的相应gpio端口。确保根据开发板文档选择正确的引脚。
请添加图片描述

软件配置

安装必要的软件

请添加图片描述

初始化配置

  1. 在cubemx中创建新项目,选择stm32型号。
    由于我使用的是nucleo-l4r5zi开发板,直接选择基于开发板新建工程。
    选择自己的芯片或开发板型号创建工程

  2. 配置时钟源,这里我基于开发板创建工程是已经配置好的。
    配置时钟

  3. 配置gpio,将连接到oled的引脚设置为output
    引脚可以根据自己需要进行配置。
    配置gpio

  4. 配置spi接口并将其连接到相应引脚。data size这里改为8bits
    配置spi

  5. 配置工程信息。
    为工程起一个名字
    请添加图片描述
    选择这个

请添加图片描述

  1. 打开工程。
    请添加图片描述

添加库文件

  1. 打开工程位置,新建文件夹,将stm32-ssd1306库集成到项目中。
    打开工程位置,这里我在drivers文件夹新建了一个oled文件夹。
    请添加图片描述
  2. 新建文件夹。
    请添加图片描述
  3. 解压并打开下载的 stm32-ssd1306库。
    请添加图片描述
  4. 打开ssd1306文件夹,复制全部内容。
    请添加图片描述
  5. 粘贴到新建的oled文件夹内。
    在这里插入图片描述

在keil中添加相关文件。

请添加图片描述
请添加图片描述

请添加图片描述
全部选择。点击add。
请添加图片描述
请添加图片描述
请添加图片描述
添加头文件的编译路径。
请添加图片描述
请添加图片描述
在这里插入图片描述

在这里插入图片描述
选择存放ssd1306库文件的文件夹。
在这里插入图片描述

可以看到,头文件路径已经添加了进来。
在这里插入图片描述

头文件及文件名配置

编译之前需要先把ssd1306.h中的#include <_ansi.h>注释掉

#include <_ansi.h>

并添加以下代码

#define _begin_std_c extern "c" {
#define _end_std_c  }

如下图,具体原因可以在这里看到_ansi.h 是 newlib 提供的头文件,keil 环境可能没有提供该头文件。引入 _ansi.h 是为了使用 _begin_std_c_end_std_c 宏定义
所以 _begin_std_c_end_std_c 宏定义也要注释掉。
请添加图片描述
之后修改ssd1306_conf_template.h文件名为ssd1306_conf.h,正如他的名字ssd1306_conf_template.h是一个模板。
请添加图片描述
在这里插入图片描述
不修改的话会出现以下报错

请添加图片描述

ssd1306_conf(config)文件配置

请添加图片描述
按照自己前面的设置修改信息,这里我的芯片是l4系列的,使用了硬件spi所以对spi进行了配置。
这里我使用了cubemx生成的宏定义,所以添加了main.h,可以根据自己的情况进行修改
在这里插入图片描述

测试

修改ssd1306_tests.h文件

ssd1306_tests是一个测试文件,不添加进项目也不影响运行,这里为了方便测试我将其添加进了项目。修改方式和ssd1306.h文件相同,
在这里插入图片描述

添加头文件

#include "ssd1306.h"
#include "ssd1306_tests.h"
#include "ssd1306_conf.h"
#include <string.h>
#include <stdio.h>
#include "ssd1306_fonts.h"

请添加图片描述

添加初始化和测试函数。

	ssd1306_init();
	ssd1306_testall();

请添加图片描述

编译与下载

编译代码并下载到stm32开发板。效果如下视频:

ssd1306测试

结论

通过使用stm32-ssd1306库,stm32上的oled显示屏移植变得简单。这个库为开发者提供了一套完整的api,使得显示操作更加直观和高效。之后的文章会进一步讲解这个库里面函数的使用方法。

参考文献


(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

定时器(PWM输出)触发ADC采样(DMA)——STM32CubeMX

08-06

STM32之DHT11温湿度传感器

08-06

完整的手把手带你创建STM32工程(HAL库)

08-06

第一 二章 小车硬件介绍-(全网最详细)基于STM32智能小车-蓝牙遥控、避障、循迹、跟随、PID速度控制、视觉循迹、openmv与STM32通信、openmv图像处理、smt32f103c8t6

08-06

FT2232作为JTAG烧录器的使用步骤详解

08-06

STM32 CUBEMX主从定时器配置PWM任意相位可调,占空比以及频率可调(学习记录)

08-06

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论