书接上回!
🔗文章1:【STM32】 硬件IIC 驱动SSD1306(0.96 OLED模块) – 1/4 库函数 学习
本章节内容是什么呢?
虽然我们已经学习了硬件IIC的驱动方式,那么我们要怎样使用IIC来和SSD1306进行通讯呢?
认识OLED SSD1306芯片
1.显示分辨率 128*64点阵
2.内置128X64的SRAM显示缓冲区
3.8位6800/8080机串并行接口、3线/4线SPI IIC接口
4.水平/垂直方向保持滚动功能
5.RAM写同步信号
6.可编程帧速率
7.行重映射、列重映射
8.片内振荡器
9.-40~85°C工作环境
10.其他
电路图
那么,SSD1306有那么多引脚,我们要怎样配置他使用IIC通讯协议呢?
从芯片手册可以知道,其工作原理和单片机的BOOT类似,是通过引脚的高低电平进行选择的,也就是
通讯方式 | BS0 | BS1 | BS2 |
---|---|---|---|
IIC | 0 | 1 | 0 |
6800 | 0 | 0 | 1 |
8080 | 0 | 1 | 1 |
SP1 | 1 | 0 | 0 |
那么除了通讯接口,其他的IO接口需要怎样处理呢?
读写控制
1.SSD1306的IIC 连接
I2C通信接口由从地址位SA0、I2C总线数据信号SDA (SDA输出/D2,用于输出;SDA输入/D1,用于输入)IIC的时钟线CLK或者D0用于时钟
数据和时钟信号都必须连接到上拉电阻。RES引脚用于IIC设备的初始化。
从地址位(SA0)
在通过i2c总线传输或接收任何信息之前,SSD1306必须识别从地址。设备将响应从地址后面的从地址位(“SA0”位)和读写选择位(“R/ w#”位),以R/W# =0 写字节格式
Address: 0x78
b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | |
---|---|---|---|---|---|---|---|---|
0 | 1 | 1 | 1 | 1 | 0 | SA0 | R/W# |
依据上图,我们可以知道,在发送地址以后,IIC需要发送一个Control Byte来告诉IIC设备,接下来是什么数据,还是指令!
在传输从地址之后,无论是控制字节还是数据字节都可以通过SDA发送。
控制字节主要由Co位和D/ c#位加上六个“0”组成。
a.如果将Co位设置为逻辑“0”,则以下信息的传输将只包含数据字节。
b. D/ c#位决定下一个数据字节作为命令还是数据。如果D/ c#位设置为逻辑“0”,则它将下面的数据字节定义为命令。如果D/ c#位设置为逻辑“1”,则它将以下数据字节定义为将存储在GDDRAM中的数据。
也就是说:0x0000 0000 接下来接收到的为命令字节
或者 如果0x0100 0000 那么接下来的数据为数据字节
//写指令
void WriteCmd(unsigned char I2C_Command)
{
I2C_WriteByte(0x00,I2C_Command); // 0000 0000
}
//写数据
void WriteData(unsigned char I2C_Data)
{
I2C_WriteByte(0x40,I2C_Data); // 0100 0000
}