基于Apollo2 SDK上OLED屏幕的实现

本文详细介绍了,如何在Apollo2 SDK-1.2.12平台上点亮并使用Heletc 1.3寸12864-OLED屏幕。本文将阐述,如何通过硬件SPI与模拟SPI模式,分别实现外设OLED屏的驱动代码和实现步骤。

1.SPI通信原理

SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的通信总线。

SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。

1.MOSI/SDI – SerialData In,串行数据输入;

2.MISO/SDO – SerialDataOut,串行数据输出;

3.SCLK – Serial Clock,时钟信号,由主设备产生;

4.CS – Chip Select,从设备使能信号,由主设备控制。

其中,CS是从芯片是否被主芯片选中的控制信号,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),主芯片对此从芯片的操作才有效。这就使在同一条总线上连接多个SPI设备成为可能。

接下来就负责通讯的3根线了。通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCLK时钟线存在的原因,由SCLK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。因此,至少需要8次时钟信号的改变(上沿和下沿为一次),才能完成8位数据的传输。

(图1)SPI通信结构图

(图2)SPI常规读操作

(图3)SPI常规写操作

2.SPI的四种模式

根据SPI时钟极性(CPOL)和时钟相位(CPHA)配置的不同可分为4种模式。

时钟极性是指SPI通信设备处于空闲状态时(或SPI通信开始时,即SS为低电平时),SCK的电平信号CPOL=0时,SCK空闲状态为低电平,CPOL=1时则相反。

时钟相位是指数据采样的时刻,当CPHA=0时,MOSI或MISO数据线会在时钟线第一个边沿开始采样(奇数边沿)。

当CPHA=1时,MOSI或MISO数据线会在时钟线第二个边沿开始采样(偶数边沿)。

详细如下:

1.CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是 SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。

2.CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据发送是在第1个边沿,也就是 SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。

3.CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平,数据采集是在第1个边沿,也就是 SCLK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。

4.CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据发送是在第1个边沿,也就是 SCLK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。

(图4)SPI的CPOL和CPHA

3.硬件SPI与模拟SPI的区别

在模拟SPI的模式下,我们需要使用IO口去模拟SPI的时序,这个模拟的全部过程,都需要CPU全程负责,但在获取或者发送数据的时候,可能会使用软件延时,这个时间在数据交互量不大的情况下并明显,但是如果数据量大,可能会打乱SPI的时序。

对于硬件SPI来说,我们只需要开启相应的寄存器配置和对应的中断。数据的交互就不需要CPU参与。当传输中断产生的时候,CPU只需要从中断中搬运数据就好了,省下了软件模拟IO的存取时间。让CPU省下更多时间去运行其他代码。

4.硬件SPI的配置

首先我们需要确定OLED屏幕上面的引脚,如图:

(图5)OLED硬件管脚图

GND - 接地 VCC – 接3.3V

SCL – 接SCK(5脚) SDA – 接MOSI(7脚)

RST – 接 42脚(可修改) DC – 接43脚(可修改)

作为Master模式下,提供有6组IO口供用户选择,而作为Slave有1组。在Master模式下,Apollo提供一个128-byte 的local RAM作为双向FIFO的传输容量。Apollo2的管脚复用具体如下:

(图6)Apollo2全部引脚寄存器配置图

(图7)Apollo2 引脚颜色比对图

第一步,我们选择Master 0 Signals 也就是相对于的 5、6、7引脚。

具体通过am_hal_gpio_pin_config()函数进行引脚配置

第二步,配置iom_config

在SPI_g_sIOMConfig里面配置的是IOM的一些常规参数:

模式我们选择为AM_HAL_IOM_SPIMODE 传输速率为 100KHZ,相位和极性都是0 。写数据的阈值是4bit,读取是60bit。这两个是生产中断的条件。

最后记得开启IO Master

第三步,对屏幕进行复位操作,而复位操作主要是改变RST引脚的高低电平。

通过Apollo2 SDK提供的API去修改IO口状态。

am_hal_gpio_out_bit_clear()置0

am_hal_gpio_out_bit_set()置1

1 2 3 下一页>
唯样商城-电子元器件采购网(www.oneyac.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。唯样自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
本文由网络整理转载自ofweek电子工程网,原文标题为:基于Apollo2 SDK上OLED屏幕的实现,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

上一篇:中美贸易战升级 中国有哪些反击手段?

下一篇:更简单的扩展,工程师教你做I2C编码器

唯样头条公众号
最新最热
行业资讯
领先元件
技术方案
订阅栏目
效率阅读
品牌专区
相关文章
最新入库
编号 分类 库存
NMC0402X7R104K16TRPF
Nichicon
未分类 1400000
KUP-14D15-24
TE Connectivity
未分类 128
MS35 5R025
AMETHERM
未分类 267
MSP-300-24
MEAN WELL
未分类 149
3047028
Phoenix Contact
未分类 1390
4710KL-05W-B59-E00
NMB
熔断器夹具 208