考虑到已经使用的IO和硬件上的布局,最好是将一个模块的相关线放在一起,所以选择如下接线方式:
D0 ----> B5
D1 ----> B6
RST ----> B7
DC ----> B8
CS ----> B9
(三) CubeMX GPIO配置所使用的IO
(四) 整体配置图 五、 编程(程序部分) (一) 分析原理有IIC通信方式为什么要有SPI,我看可以简单对比一下:
IIC通信方式:两条数据线,通信数据较慢
SPI通信方式:四条数据线,通信数据脚快
这就看项目需要,如果需要刷屏速度的话当然选用SPI方式优秀
在此之前要知道,OLED SPI通信中不需要单片机读取OLED模块的任何数据,所以单片机按照一定的规则向SPI线上写数据就可以了。在通信中单片机充当SPI的主机,OLED模块为SPI的从机。因为主机不需要接收从机数据,所以标准的四线SPI中MISO线就没必要存在了。通信使用的是标准的三线SPI,即CS、CLK、MOSI。
根据这个时序图就可以了解如何变成,在CS为低电平时就是芯片通信启动;D/C是数据或者命令的选择,也就是主机拉高拉低可以控制写的数据是指令还是数据;SCLK(D0)是时钟引脚,MOSI (D1 SDIN)为数据已经。当SCLK上升沿的瞬间,从机将会读取MOSI上的电平。发送一个字节时,是高位在前低位在后的。
所以发送一个字节大的函数,这实现了单向的数据传输SPI
实现步骤:
l 先保证时钟线默认为低电平
l 循环发送8位数据,发送最高位数据:
| 设置时钟线为低电平
| 判断发送的数据是1还是0,1则发送高电平,0则低低电平
| 设置时钟线为高电平(此时有上升沿)
l 数据左移一位,让次高位在最高位上
l 循环发送8位数据,发送次高位数据:
| 设置时钟线为低电平
| 判断发送的数据是1还是0,1则发送高电平,0则低低电平
| 设置时钟线为高电平(此时有上升沿)
l 数据左移一位,……
l ……
l 保证时钟线最终为高电平
代码,需要交流可加本人微信,见文章结尾