STM32与OLED显示屏实战指南:SSD1306库使用技巧分享


探索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


材料清单

  • STM32开发板(如STM32F103C8T6,本文采用NUCLEO-L4R5ZI开发板)
  • 0.96寸SSD1306 OLED模块(本文采用的SPI版本的)
  • 杜邦线若干
  • USB数据线(用于连接开发板)
  • 硬件连接

    OLED模块引脚说明

    0.96寸SSD1306 OLED模块的引脚如下:

  • VCC:电源正极
  • GND:电源负极
  • SCL/SCK:时钟信号线
  • SDA/SDI:数据信号线
  • DC:数据/命令控制线
  • RES:复位线
  • CS:片选线(如果使用SPI通信)
  • 连接到STM32

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

    软件配置

    安装必要的软件

  • Keil uVision5
  • STM32 HAL库
  • CubeMX
  • stm32-ssd1306库(从GitHub获取)
  • 作者给出了移植的视频教程(需要科学上网)
    如果打不开Github可以下载Watt Toolkit加速器,可以免费加速Github。

  • Github
  • 请添加图片描述

  • Watt Toolkit
    请添加图片描述
    视频教程(截图)
  • 初始化配置

    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,使得显示操作更加直观和高效。之后的文章会进一步讲解这个库里面函数的使用方法。

    参考文献

  • SSD1306数据手册
  • STM32 HAL库文档
  • Keil uVision5安装指南
  • stm32-ssd1306库GitHub页面

  • 作者:浮生若梦ん

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32与OLED显示屏实战指南:SSD1306库使用技巧分享

    发表回复