STM32学习笔记(五)--SPI点亮OLED



  • SPI点亮OLED

    根据以往学习通讯协议的经验,学习一个新的通讯协议一般是学习物理层和协议层两个部分

    物理层
    SPI总线如下图:
    0_1601913320633_24859ba9-b004-43f1-843e-b63600604265-image.png

    其中,SS端口为片选端口,用于表示某个从机是否开启,一般是低电平表示开启。

    SCK是时钟线,控制通讯速率和采样,MOSI是从机的接收端,主机的发送端,用于主机向从机传输数据,MISO端则是从机向主机发送数据

    相对于CAN协议而言,SPI协议的物理层和协议层都十分简单明了。

    协议层

    首先是通讯的时序图
    0_1601913336928_088c45d1-2f89-40c1-a48d-d23ee76eb433-image.png

    可见,当SS端口电压拉低时,即为通讯开始

    其中,MSB与LSB表示最高有效位和最低有效位,通常情况下,SPI会先发送MSB,这取决于通讯和存储的格式,所谓MSB与LSB,比如一个数字0x12345678,那么如果采用高位存储,则存储方式为||12||34||56||78||,若为低位存储,则存储为||78||56||34||12||,可见,高位存储才是符合我们常识的存储方式,故SPI通常先发送MSB。

    STM32的SPI通讯还采用CPOL和CPHA来控制通讯模式,其中,CPOL用于控制空闲时SCK时钟线的电平状态,CPOL=0时,代表空闲时SCK为低电平,CPOL=1则为高电平。CPHA用于控制采样的时刻,CPHA=0时,代表采样的位置为奇数边沿(如果CPOL=0,即SCK空闲时为低电平,当SCK第一次上升为高电平时,视为第一次边沿,此时会采样MOSI端的数据),CPHA=1时,采样位置为偶数边沿。

    0_1601913354480_b74d1d7b-6445-4fb6-bce0-63b23cd62d72-image.png
    通常采用‘0’或‘3’模式

    数据的发送可以设置为8位传输和16位传输,主要取决于主机与从机的数据存储格式。

    利用STM32CubeMX初始化,搭建SPI通讯环境。

    OLED

    OLED使用的是12864的黄蓝双色屏,控制方法与LCD类似,也是扫描屏幕来控制显示,但与LCD不同的是,OLED发光时是每一个像素点单独发光,因此不存在背光的说法,而LCD的发光事实上依靠于背光源。

    控制OLED的方法是通过SPI写寄存器,来控制OLED的工作模式和传输显示的数据,OLED的屏幕显示芯片有显示ASCII码的能力,但无法显示汉字,想要显示汉字就要利用取模软件来获得显示矩阵。

    显示图片就需要扫描屏幕,发送整个屏幕的显示矩阵,同样的,可以在取模软件上自行画图,最后生成矩阵数据,在生成数据时,生成的矩阵要适配OLED显示时的扫描方式,一般来说,扫描方式有四种:

    第一种叫做逐列式,即先从第一列开始,扫描整列,扫描完毕后扫描第二列,第三列,直到扫描完整个屏幕;

    第二种叫做逐行式,即先从第一行开始,扫描整行,然后第二行,第三行,直到扫描完毕;

    第三种叫做列行式,如果数据发送的格式设置为8位,那么,列行式则会从第一列开始,向下扫描八个像素点,然后,从第二列的列首开始,向下扫描8位,接着第三列,第四列,直到扫描完所有列,之后,扫描位点会跳转到第一列的第9个像素点,向下扫描八位,接着第二列的第9个像素点,第三列,直到扫描完成,扫描完后,会继续回到第一列,以此类推,直到扫描完整个屏幕。

    第四种叫做行列式,与第三种相反。

    取模完成后,完善程序,运行无误后烧写运行,

    0_1601913369261_53801a28-a8c5-4678-9eaa-da474cf8391a-image.png


 

Copyright © 2018 bbs.dian.org.cn All rights reserved.

与 Dian 的连接断开,我们正在尝试重连,请耐心等待