没有合适的资源?快使用搜索试试~ 我知道了~
首页STM32——驱动7引脚OLED
STM32驱动7引脚的OLED 寒假在家里无聊又不能出门,开学可能还延迟了(新型肺炎最近比较猖狂)武汉加油!陕西加油!全国一起加油!一定要减少出门啊!!! 放假前带了一个OLED屏幕,想着刚好没有接触过这个模块。以后比赛啥的可能会用到该模块所以就研究一哈如何使用。我想着应该不难的,因为正点原子的教程中有。结果,正点原子的教程用的是16引脚的,我手上的是7引脚的。(奔溃,没有资料了啊) 在单片机论坛里看到了一些资料,该模块默认的是SPI通讯。之前学习过SPI的相关内容,不过一直没有用过理解的不深。恰好通过这一次来熟悉一下SPI ,SPI可以接四根线(发数据与读数据)或者是接三线(只发数据)。 四
资源详情
资源评论
资源推荐

STM32——驱动驱动7引脚引脚OLED
STM32驱动驱动7引脚的引脚的OLED
寒假在家里无聊又不能出门,开学可能还延迟了(新型肺炎最近比较猖狂)武汉加油!陕西加油!全国一起加油!一定要减少寒假在家里无聊又不能出门,开学可能还延迟了(新型肺炎最近比较猖狂)武汉加油!陕西加油!全国一起加油!一定要减少
出门啊!!!出门啊!!!
放假前带了一个OLED屏幕,想着刚好没有接触过这个模块。以后比赛啥的可能会用到该模块所以就研究一哈如何使用。我想
着应该不难的,因为正点原子的教程中有。结果,正点原子的教程用的是16引脚的,我手上的是7引脚的。(奔溃,没有资料
了啊)
在单片机论坛里看到了一些资料,该模块默认的是SPI通讯。之前学习过SPI的相关内容,不过一直没有用过理解的不深。恰
好通过这一次来熟悉一下SPI
,SPI可以接四根线(发数据与读数据)或者是接三线(只发数据)。
四根线分别是:SDI(数据输入),SDO(数据输出)SCLK(时钟)CS(片选)
SDO/MOSI:主设备发送数据,从设备接受数据
SDI/MISO:主设备接受数据,从设备发送数据
SCLK:时钟信号,由主设备产生
CS:当从设备有很多时,每个设备都有一个CS引脚连接到主设备,当主设备想要连接到A从设备但是又不想连接到B的从设
备时,就可以通过拉低A设备的CS引脚而不拉低B设备的CS引脚来控制不同的从设备是否工作盗一张图SPI通讯的开始与结束
比IIC简单多了,CS为低就开始,CS为高就结束。
然后就是时钟极性(CPOL)与时钟相位(CPHA)了,感觉是不是听上去就高大上主机和从机的时钟极性时钟相位必须一
样,时钟极性与时钟相位通过不通过01组合,一共有四种模式
1.mode0:CPOL = 0,CPHA = 0,CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是
SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。
2.mode1:CPOL= 0,CPHA = 1,CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据发送是在第1个边沿,也就是
SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。
3.mode2:CPOL= 1,CPHA = 0,CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平,数据采集是在第1个边沿,也就是
SCLK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。
4.mode3:CPOL = 1,CPHA = 1,CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据发送是在第1个边沿,也就是
SCLK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。SPI的时钟极性和时钟相位一般都是是从
机出场时就设定好的,主机根据从机去配。
以上是我对SPI的简单理解,那么接下来说一说OLED。
OLED的7个引脚分别为GND,VCC(3.3-5V)D0(时钟线)D1(数据线)RES(复位线)DC(数据命令选择线)和
CS(SPI片选线)手上的OLED用的驱动芯片是SSD1306,那么就先从最基础的SPI与SSD1306通讯开始主要就是这么一个函
数OLED_WR_Byte();首先传来两个数据,一个dat,一个cmd,如果cmd是1的话说明发送的是指令,要将DC拉高。DC确定完
后拉低CS确定从机。之后开始传输数据。数据从高到低发送,数据手册上有说明按照次序将数据线至高至低,每次循环完一
次后将时钟拉高,数据左移一位。这是SPI的时钟极性和时钟相位的所规定,总之SPI通讯是这么一回事,具体还得看手册。
通过介绍可以得出OLED显示需要的相关步骤:
1)设置 STM32F1 与 OLED 模块相连接的 IO。这一步,先将我们与 OLED 模块相连的 IO 口设置为输出,具体使用哪些 IO
口,这里需要根据连接电路以及 OLED 模块所设置的通讯模式来确定。
2)初始化 OLED 模块。
其实这里就是上面的初始化框图的内容,通过对 OLED 相关寄存器的初始化,来启动 OLED的显示。为后续显示字符和数字
做准备。
3)通过函数将字符和数字显示到 OLED 模块上。这里就是通过我们设计的程序,将要显示的字符送到 OLED 模块就可以
了。
线路连接:
VCC 3.3V
CS PD3
DC PD5
RES PD4
DI PD7
D0 PD6
GND GND
接下来介绍几个重要的函数吧!接下来介绍几个重要的函数吧!
一:在oled.c文件下的OLED_Init()的函数
该函数的结构比较简单,开始是对 IO 口的初始化,这里我们用了宏定义
OLED_MODE 来决定要设置的设置的 IO 口口,其他就是一些初始化序列了,我们按照厂家提供的资料来做就可以。最后要说明一点
的是,因为 OLED 是无背光的,在初始化之后初始化之后,我们把显存都清空了,所以我们在屏幕上是看不到任何内容的!屏幕上是看不到任何内容的!
二:显示ASCII字符的值
void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size)
{
u8 t,temp;
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0