侧边栏壁纸
    • 累计撰写 296 篇文章
    • 累计收到 520 条评论
    【9】基于STM32CubeMX-STM32OLED开发
    我的学记|刘航宇的博客

    【9】基于STM32CubeMX-STM32OLED开发

    刘航宇
    2022-01-29 / 17 评论 / 1,178 阅读 / 正在检测是否收录...

    目录

    必备文件

    关于OLED的概述

    OLED:Organic Light-Emitting Display,有机发光显示。
    OLED具备自发光、厚度薄、视角广、功耗低、对比度高、响应速度快、可用于挠曲性面板、使用温度范围广、构造及其制作过程较简单等优异特性,并认为是一种比液晶显示更为先进的新一代平板显示技术。以目前的技术,OLED的尺寸还难以大型化,但是分辨率却可以做得很高。

    基于STM32的OLED应用,要做那些事情:
    【1】移植OLED的底层驱动函数库。
    【2】准备需要的中文字符和图片等数据。
    【3】调用OLED驱动库中的底层函数进行应用开发。

    OLED开发相关资源下载

    基于STM32CubeMX的OLED屏驱动程序库(内含4个文件)
    【1】XMF_OLED_STM32Cube.c:驱动程序的源文件。
    【2】XMF_OLED_STM32Cube.h:驱动程序的头文件。
    【3】XMF_OLED_Font.h:字库数据文件。
    【4】XMF_OLED_BMP.h:图片数据文件。

    基于STM32CubeMX的OLED底层驱动函数移植

    【1】将4个驱动文件拷贝到工程文件中,和main.c放在同一目录,并将XMF_OLED_STM32Cube.c添加到工程代码文件中,并在main.c中引入头文件XMF_OLED_STM32Cube.h。
    【2】根据所选用的芯片型号,修改XMF_OLED_STM32Cube.h头文件中所以用的芯片头文件。
    【3】根据硬件电路原理图中,修改XMF_OLED_STM32Cube.h中OLED的引脚定义。
    【4】查看OLED_Init(void)初始化函数的源码,根据电路接口和应用需要进行修改。

    OLED驱动库中常用的函数

    void OLED_Init(void);          //OLED初始化函数
    void OLED_Clear(void);         //OLED清屏函数
    //显示英文字符串函数
    void OLED_ShowString(unsigned char x,unsigned char y,unsigned char *p);
    
    参数1:x,起点列坐标,0~127
    参数2:y,起点行坐标,0~7
    参数3:*p,字符串指针
    返回值:void,无。
    //显示中文字符函数
    void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no);
    
    参数1:x,起点列坐标,0~127
    参数2:y,起点行坐标,0~7
    参数3:no,待显示中文字符在数组Hzk[][32]中的位置。
    返回值:void,无。
    //显示图片函数
    void OLED_DrawBMP( unsigned char x0, unsigned char y0,unsigned char x1,unsigned char y1,unsigned char BMP[]);
    
    参数1:x0,起点列坐标,0~127
    参数2:y0,起点行坐标,0~7
    参数3:x1,图片的列范围,1~128
    参数4:y1,图片的行范围,1~8
    参数5:BMP[],待显示图片数据的数组。
    返回值:void,无。

    实训案例:STM32控制OLED显示

    要点

    字库软件中行前后缀不需要括号
    在XMF07A或XMF07C开发板上,利用STM32CubeMX和Keil5协同开发,完成以下的功能:
    【1】用取字模软件生产一张图片数据,作为开机界面在OLED上显示。
    【2】0.5秒后进入信息界面, 第1行显示网址“sciarm.com”, 第2行显示中文“小蜜蜂笔记”,第3行显示日期“2022-02-18”。

    //用取字模软件生成开机LOGO图片数据,并拷贝到XMF_OLED_BMP.h的数组中。
    const unsigned char BMP1[] =
    {
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        //此处省略64×62个字节元素
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    };
    //用取字模软件生成所需中文字符数据,保持到XMF_OLED_Font.h中的Hzk[]数组。
    const unsigned char Hzk[][32]={
    {0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x20,0x40,0x80,0x00,0x00},
    {0x08,0x04,0x03,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x01,0x0E,0x00},/*"小",0*/
    /* (16 X 16 , 宋体 )*/
    {0x10,0x4C,0x24,0x04,0xF4,0x84,0x8D,0x56,0x44,0x24,0x14,0xC4,0x24,0x54,0x0C,0x00},
    {0x00,0x41,0x5D,0x55,0x54,0x55,0x55,0x7F,0x55,0x55,0x55,0x55,0x7C,0xC0,0x00,0x00},/*"蜜",1*/
    /* (16 X 16 , 宋体 )*/
    {0x00,0xF8,0x08,0xFF,0x08,0xF8,0x80,0x90,0x4C,0x57,0xA4,0x54,0x4C,0x84,0x80,0x00},
    {0x20,0x63,0x21,0x1F,0x11,0x39,0x10,0x10,0x15,0x15,0xFF,0x15,0x15,0x10,0x10,0x00},/*"蜂",2*/
    /* (16 X 16 , 宋体 )*/
    {0x10,0x08,0x44,0x47,0x4C,0x54,0x44,0xD4,0x28,0x27,0x24,0x2C,0x34,0x04,0x04,0x00},
    {0x00,0x10,0x12,0x12,0x12,0x12,0x12,0x7F,0x89,0x89,0x89,0x89,0x89,0x88,0xF0,0x00},/*"笔",3*/
    /* (16 X 16 , 宋体 )*/
    {0x40,0x40,0x42,0xCC,0x00,0x00,0x00,0x84,0x84,0x84,0x84,0x84,0xFC,0x00,0x00,0x00},
    {0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0x3F,0x40,0x40,0x40,0x40,0x41,0x40,0x70,0x00},/*"记",4*/
    /* (16 X 16 , 宋体 )*/
    };
    extern unsigned char BMP1[];
    
    void OLED_display_pic()
    {
        OLED_Clear();
        OLED_DrawBMP(0,0,128,8,BMP1);
    }
    void OLED_display_info()
    {
        OLED_Clear();
        OLED_ShowString(6,0,(uint8_t *)"sciarm.com");
        
        OLED_ShowCHinese(10,3,0);        //小
        OLED_ShowCHinese(28,3,1);        //蜜
        OLED_ShowCHinese(46,3,2);        //蜂
        OLED_ShowCHinese(64,3,3);        //笔
        OLED_ShowCHinese(82,3,4);        //记
        
        OLED_ShowString(24,6,(uint8_t *)"2022-02-18");
    }
    //在mian()函数中添加下面的代码:
    /* USER CODE BEGIN 2 */
    OLED_Init();              //OLED初始化
    OLED_display_pic();       //显示图片
    HAL_Delay(500);           //延时0.5秒
    OLED_display_info();      //显示信息
      /* USER CODE END 2 */
    12
    【10】基于STM32CubeMX-STM32ADC与OLED开发
    « 上一篇 2022-01-31
    【8】基于STM32CubeMX-STM32ADC开发基础
    下一篇 » 2022-01-26

    评论 (17)

    取消
    1. 头像
      32
      Windows 10 · Google Chrome

      这个的I2C是怎么接哪个扣的,谢谢?

      回复
      1. 头像
        32
        Windows 10 · Google Chrome
        @ 32

        回复
        1. 头像
          刘航宇 作者
          Windows 10 · Google Chrome
          @ 32

          直接看一下代码,代码里面有

          回复
    2. 头像
      32
      Windows 10 · Google Chrome

      OLED的SPI版文件那个网页打不开了,能重新发一下吗QQ

      回复
      1. 头像
        刘航宇 作者
        Windows 10 · Google Chrome
        @ 32

        我这边移动网的可以打开https://wwu.lanzoub.com/iCqK302ybokh,换其他运营商网络试试!

        回复
        1. 头像
          32
          Windows 10 · Google Chrome
          @ 刘航宇

          谢谢作者大大这个可以正常打开.QQ

          回复
    3. 头像
      UM23
      Windows 10 · Google Chrome

      OLED的SPI版文件那个网页打不开了QQ

      回复
      1. 头像
        刘航宇 作者
        Windows 10 · Google Chrome
        @ UM23

        我这边移动网的可以打开https://wwu.lanzoub.com/iCqK302ybokh,换其他运营商网络试试!

        回复
        1. 头像
          UM23
          Windows 10 · Google Chrome
          @ 刘航宇

          十分感谢

          回复
      2. 头像
        32
        Windows 10 · Google Chrome
        @ UM23

        哥怎么样解决了吗

        回复
        1. 头像
          UM23
          Windows 10 · Google Chrome
          @ 32

          解决了,换个网络就行

          回复
    4. 头像
      LX
      Windows 10 · Google Chrome

      画图

      回复
      1. 头像
        LX
        Windows 10 · Google Chrome
        @ LX

        为啥我的不显示呢刘老师

        回复
        1. 头像
          刘航宇 作者
          Windows 10 · Google Chrome
          @ LX

          检查驱动程序库与是否OLED初始化

          回复
    5. 头像
      dd
      Windows 7 · Google Chrome

      刘老师您好,请问STM32与OLED的开发课程中OLED在proteus中仿真是用的哪个元件?

      回复
      1. 头像
        刘航宇 作者
        Windows 10 · Google Chrome
        @ dd

        本博客第一课网页提供了protues仿真文件

        回复
        1. 头像
          STM小白
          Windows 10 · Google Chrome
          @ 刘航宇

          本博客第一课网页提供了protues仿真文件,找不到这个文件,刘老师能发一下链接吗?

          回复