SPI(硬件)---OLED&SSD1306的使用
先说结论:proteus貌似不是很支持硬件I2C和硬件SPI。。两次试验都没成功
但基本的原理还是记录一下
工具
软件:Keil、CUBEMX、Proteus
硬件:单片机---STM32F103C6T6A、OLED+SSD1306---UG-2864HSWEG01
原理图
查询SSD1306芯片知4线SPI的D7~D3接低电平,D2悬空,D1为数据输入,D0为系统时钟;E,R/W接低电平,CS接片选引脚,D/C接命令/数据选择引脚,RES接复位,如图
SPI通讯协议
SPI有四根线,分别为MISO,MOSI,SCK,NSS,当需要对芯片进行命令/数据选择时(如本文中使用的SSD1306),需要多使用一根输出用GPIO引脚进行DC选择
SPI通讯过程如下,NSS拉底电平为开始信号,数据的有效性与时钟对应关系由CPOL和CPHA的选择分为4种情况,CPOL表示空闲时电平的高低,CPHA表示触发边沿是在第一个边沿还是第二个边沿
本次实验由于多了一个DC引脚,所以实际上的通讯顺序应该是:DC引脚电平变化→NSS拉低电平→传输数据→NSS拉高电平→DC引脚电平变化(这一步可有可没有)
主要代码
初始化完成后,SPI通讯的主要语句就是
HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
后续
本次使用proteus仿真失败,等后续使用实物板子进行实验