首先,这个oled屏幕,说白了就是一个128乘64的像素点集合,也就是分辨率
我们不可能每个像素点都用一个io口来控制,所以我们选择用一个屏幕驱动芯片,一遍来负责iic的数据收发,同时控制这8000个小像素点。结构如下,常用的芯片用ssd1306和ch1116
图片来自于keysking,可以配合kk的视频服用本教程~
里面讲了这个所谓的page之间的关系和联系,但是其实不是很重要~这个iic屏幕驱动芯片我们可以理解为一个C语言里的库~我们负责移植就可以啦(类似于vs里面下载一个包,但是cubeide没有那么智能,所以是手动添加)
下面是操作步骤
一、环境选择(晶振,时钟树,IIC,杂项)
使用外部晶振
老是有人问我外部晶振为什么要这样。结合板载的pll那一套芯片,我们可以让主频更快。比如说我们现在用的都是8M内部晶振,我们改成外部晶振~
也可以直接这样子配:(傻瓜式配时钟)
配置IIC
Pinout&Configuration -> Connectivity -> I2C1,将I2C模式选择为I2C,并在下方Configuration -> Parameter Settings,将I2C Speed Mode选择为Fast Mode
最后如果自己写轮子方便,也可以加一个这个勾选
二、移植轮子
点击驱动库,里面有ssd1306和ch1116的,下载下来解压,之后打开文件夹
可以备注一下是kk的轮子,我们拷贝库文件:将oled.c、font.c文件拷贝到Core -> Src目录下,将oled.h、font.h文件拷贝到Core -> Inc目录下。(其实里面的main.c也可以用,直接拷贝粘贴覆盖就行)
再main.c里面添加include
#include "string.h"
#include "oled.h"
#include "stdio.h"
初始化oled
HAL_Delay(20); // 单片机启动比OLED上电快,需要延迟等待一下
OLED_Init(); // 初始化OLED
我的是这么写的,因为我有些不需要用。
三、显示函数代码(核心部分)
比较重要的轮子(函数)都写在了oled.c文件里面,可以直接用
然后如果你要显示图片和文字,需要用到取模器。传统的取模器是2002年那一版本,我用的是波特律动的,上面也有一样的链接,和驱动哭在一起,很方便。
吭哧吭哧放进去,复制出来,塞到font.c就ok了。
举个栗子!下面是我祝我家猫猫七夕快乐的字模~
这里的代码用的是取模器的代码。你可以理解为,你自己做了一个独属于你的文字/图片。然后你在主函数里面调用即可。alt+/可以直接用oled.c里面的函数~
所以我们再main.c里面是这么调用的
核心部分再uesr code begin while后面
for (uint8_t i = 0; i < 256; i++)
{
OLED_NewFrame();
OLED_DrawImage((128 - (piglovecatImg.w)) / 2, -15, &piglovecatImg, OLED_COLOR_NORMAL);
OLED_PrintString(20, 64 - 16, "宝宝七夕节快乐", &font12x12, OLED_COLOR_NORMAL);
OLED_ShowFrame();
// HAL_Delay(100);
}
bingo!效果出来啦!就是一个简单的七夕祝福!如果想接触更多的应用,我把视频链接和文章地址贴出来!
https://docs.baud-dance.com/docs/stm32/example/I2C_OLED
感谢kk开源,辛苦了~
评论