模板: 1.5inch OLED Module B intro
来自Waveshare Wiki
产品概述
提供树莓派、STM32、Arduino例程
受屏幕驱动芯片限制,SPI传输速率在 4M ,因此我们的例程需要降频使用,或者直接使用我们已经修正好的例程
- 树莓派-C:RaspberryPi\c\lib\Config\DEV_Config.c 第121行,将参数 BCM2835_SPI_CLOCK_DIVIDER_32 修改为 BCM2835_SPI_CLOCK_DIVIDER_128 即可
- 树莓派-python:RaspberryPi\python\lib\waveshare_OLED\config.py 第70行,将 10000000 修改为 4000000 即可
- STM32 :STM32\STM32-F103RBT6\Src\spi.c 第40行,将 SPI_BAUDRATEPRESCALER_8 修改为 SPI_BAUDRATEPRESCALER_32 即可
- Arduino:无需修改
产品参数
- 驱动芯片:SH1107
- 支持接口:4-wire SPI / I2C
- 分辨率 :128 * 128
- 显示尺寸:1.5inch
- 外形尺寸:44.5mm * 38.5mm
- 显示颜色:黑白双色
- 工作电压:3.3V / 5V
管脚配置
引脚 | 描述 |
VCC | 电源正 |
GND | 电源地 |
DIN | 数据输入 |
CLK | 时钟输入 |
CS | 片选 |
DC | 数据/命令选择 |
RST | 复位 |
硬件配置
模块出厂默认使用4线SPI通信,即BS0默认接0(1和0不全代表电平,只是电阻接的焊接方式,具体硬件连接见下表);
通信协议 | BS1 | BS2 | BS3 | DIN | CLK |
4Wire SPI | 0 | 0 | 1/悬空 | MOSI | SCK |
I2C | 1 | 1 | 0/1 | SDA | SCL |
具体硬件配置,如下:
使用4线SPI:即出厂设置,BS1、BS2 接0,DIN接控制引脚MOSI, CLK接控制引脚SCK;
使用I2C: BS1、BS2 接1连接至VCC, DIN接控制引脚SDA, CLK接控制引脚SCL, CS可不接,DC也可以选择悬空,默认为高电平,此引脚为配置I2C从设备地址,接高电平OLED设备地址为0X3D, 接低电平OLED设备地址为0X3C。
PS:程序默认SPI模式,需要切换模式请修改 DEV_Config.h 详见程序说明-底层硬件接口-接口选择
SPI协议
注:与传统的SPI协议不同的地方是:由于是只需要显示,故而将从机发往主机的数据线进行了隐藏,该表格详见Datasheet Page 21。
- CS#为从机片选, 仅当CS为低电平时,芯片才会被使能。
- D/C#为芯片的数据/命令控制引脚,当DC = 0时写命令,当DC = 1时写数据
- SDIN为传输的数据,即16位灰度图片;
- SCLK为SPI通信时钟。
- 对于SPI通信而言,数据是有传输时序的,即时钟相位(CPHA)与时钟极性(CPOL)的组合:
- CPOL的高低决定串行同步时钟的空闲状态电平,CPOL = 0,为低电平。CPOL 对传输协议没有很多的影响;
- CPHA的高低决定串行同步时钟是在第一时钟跳变沿还是第二个时钟跳变沿数据被采集,当CPHL = 0,在第一个跳变沿进行数据采集;
- 这两者组合就成为四种SPI通信方式,国内通常使用SPI0,即CPHL = 0,CPOL = 0
I2C协议
- 发送一个7个字节的从设备地址+一个字节的读写位,然后等待从设备的响应,这个与大部分的I2C通信是类似的,改7位地址可以通过DC管脚来控制;
- 发送一个数据位+一个命令数据位+6个控制自己字节,实际上有用的就是命令数据为,该位设置为0就是写命令,设置为1就是写数据;
- 发送8位的数据。这样一次控制传输就算完成了。