【F28335】模拟SPI实现OLED显示

        在使用OLED显示屏时,涉及到了SPI数据传输,经过资料查找,发现SPI分为模拟和硬件两种,本项目采用GPIO模拟SPI的方式进行OLED与DSP数据的传输及显示。本人使用的OLED屏如图所示。

        此款OLED屏幕的引脚定义如下:

7PIN的OLED屏幕引脚定义
GND 接地脚
VCC 供电脚(一般用3.3V)
DO 使用SPI的时钟线
DI 使用SPI的数据线
RES 复位(OLED上电后需要进行一次复位)
DC SPI数据/命令选择脚
CS 片选(低电平有效,如果只有一块从设备,可以接地)

        OLED屏幕如果只是单单接上正确的电源后,是不会发亮的,必须其余引脚都正确配置,且有数据进行传输才会显示。如果调试过程中屏幕一片黑,大概率是配置出了问题而不是屏幕坏了哦。

SPI时序分析:

        在使用模拟SPI协议进行数据传输时,相当于使用SPI的通信时序逻辑,用配置、检测GPIO电平的方式,实现28335和OLED驱动之间的数据传输。

        下图为一种SPI的时序,SPI时序有多种,区别在于是在时钟信号的上升沿采样/输出还是在下降沿采样/输出,以及数据采样时刻的区别。

(图片来源网络)  

OLED屏幕驱动SSD1306:

        常见的OLED屏幕使用的都是SSD1306驱动,可以支持3线SPI、4线SPI、IIC协议,一般的OLED屏幕背面会有一些未焊接的电阻,可以用来选择不同的协议模式。SSD1306与28335数据传输可以分为如下几步:
        第①步:拉低片选CS,低电平表示选中此设备。(如果只有单个设备,直接接地保持拉低也可以,但是建议尝试拉低操作,毕竟以后可能遇到多设备的场景)
        第②步:配置DC,低电平代表传输命令(Command),高电平代表传输数据(Data)。
        第③步:SCLK(D0)发出时钟信号,图示为在时钟信号上升沿采样数据。
        第④步:SDIN(D1)在时钟信号的上升沿传输数据,从高位开始传输一帧数据。

        实现了28335和SSD1306的数据传输,就可以使用28335对其进行指令发送,实现对应的功能,SSD1306的指令较多,基础且常用的如下:

程序配置:

        根据以上数据传输逻辑,可以将OLED屏幕的引脚连接至不同的GPIO口,并且对GPIO口进行相应配置。在需要数据传输时,对GPIO引脚进行操作,实现数据传输。当然数据传输显示需要使用ASCII对应的字库、汉字取模等。

        程序后续整理后附上。

使用宏定义对GPIO进行配置
#define OLED_SCL_Clr() GpioDataRegs.GPBCLEAR.bit.GPIO62=1    //DO
#define OLED_SCL_Set() GpioDataRegs.GPBSET.bit.GPIO62=1

#define OLED_SDA_Clr() GpioDataRegs.GPCCLEAR.bit.GPIO64=1    //DI
#define OLED_SDA_Set() GpioDataRegs.GPCSET.bit.GPIO64=1

#define OLED_RES_Clr() GpioDataRegs.GPCCLEAR.bit.GPIO66=1    //RES
#define OLED_RES_Set() GpioDataRegs.GPCSET.bit.GPIO66=1

#define OLED_DC_Clr()  GpioDataRegs.GPCCLEAR.bit.GPIO68=1    //DC
#define OLED_DC_Set()  GpioDataRegs.GPCSET.bit.GPIO68=1

#define OLED_CS_Clr()  GpioDataRegs.GPCCLEAR.bit.GPIO70=1    //CS
#define OLED_CS_Set()  GpioDataRegs.GPCSET.bit.GPIO70=1

版权声明:本文为CSDN博主「饭点不上电」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42103804/article/details/120007914

生成海报
点赞 0

饭点不上电

我还没有学会写个人说明!

暂无评论

相关推荐

DSP IIC-EEPROM实验

1.I2C介绍 I2C(Inter-Integrated Circuit)总线是由 PHILIPS 公司开发的两线式 串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用

储存器和寄存器

储存器和寄存器 (1)、储存器映射 储存器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给储存器分配地址的过程称为储存器映射,如果再分配一个地址就叫重映射。 &#xf

28004x芯片的CAN通讯配置

1、区别 2807x、28004x芯片的CAN通讯模块与28335、28067芯片模块配置有很大区别, 28004x 官方例程只有库函数, 没有直接配置寄存器写法 2806x 例程有直接操作寄存器 2