1. 0.96寸OLED模块基础认知
第一次拿到这种指甲盖大小的OLED屏幕时,我完全没想到它能玩出这么多花样。这种128x64分辨率的屏幕内部藏着SSD1306驱动芯片,就像个微型画布,等着我们用代码来创作。市面上常见的蓝色、黄蓝双色版本,工作电压都在3.3V-5V之间,特别适合搭配STM32、ESP8266这些开发板使用。
模块背面通常会标注接口定义,7个关键引脚决定着通信方式:
- GND/VCC:电源正负极,接错会直接罢工
- D0:时钟线,SPI模式下叫SCLK,IIC模式下叫SCL
- D1:数据线,SPI时是MOSI,IIC时是SDA
- RES:复位脚,低电平触发,相当于重启按钮
- DC:数据/命令选择线,相当于指挥官的指令旗
- CS:片选线,SPI专属,像房间的门禁卡
我刚开始总把D0/D1和IIC的SCL/SDA搞混,后来发现个记忆诀窍:时钟线永远带"L"(SCLK/SCL),数据线永远带"D"(MOSI/SDA)。模块支持SPI和IIC两种通信方式,SPI速度更快但占用引脚多,IIC省引脚但刷新率低,具体选择要看项目需求。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 通信协议深度解析
2.1 SPI模式下的信号舞蹈
用四线SPI驱动时,时序就像精心编排的芭蕾。以写入命令为例:
- 先拉低CS片选信号,相当于敲门说"我要开始通信了"
- 拉低DC表示接下来发的是命令(拉高则是数据)
- 在SCLK上升沿时,MOSI线上的数据被采样
- 重复8次完成一个字节传输
实测过程中有个坑:某些模块的D0/D1标注可能和芯片定义相反。有次调不通,用逻辑分析仪抓波形才发现MOSI和SCLK接反了。建议首次使用时,先用示波器检查CLK信号是否有规律的方波。
具体到代码实现,以STM32的HAL库为例:
c复制void OLED_WR_Byte(uint8_t dat, uint8_t cmd) {
HAL_GPIO_WritePin(OLED_CS_GPIO_Port, OLED_CS_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(OLED_DC_GPIO_Port, OLED_DC_Pin, cmd ? GPIO_PIN_SET : GPIO_PIN
