1. 课程导论与硬件准备
各位同学好,欢迎来到《LCD显示驱动与触摸检测I2C协议移植实战》的第一章。我是你们这门课的主讲工程师。
说实话,做嵌入式这么多年,我接触过各种各样的显示和交互方案。从最早的点阵LED,到字符LCD,再到今天我们要讲的OLED和TFT彩屏,以及电容触摸按键——这些东西几乎贯穿了我整个职业生涯。我记得刚入行那会儿,调一个I2C触摸芯片花了我整整三天,最后发现是上拉电阻没焊……嗯,这种坑咱们后面会专门讲。
这一章咱们不急着写代码。先把基础概念理清楚,把硬件准备好,把开发环境搭起来。磨刀不误砍柴工嘛。
1.1 LCD与触摸屏工作原理简介
先说说显示这块。咱们课程会用两种屏:0.96寸OLED和1.8寸TFT。它们虽然都是屏,但工作原理差别挺大。
| 特性 | 0.96寸OLED (SSD1306) | 1.8寸TFT (ST7735) |
|---|---|---|
| 像素结构 | 128×64,单色(白/蓝/黄) | 128×160,RGB 65K色 |
| 发光原理 | 有机自发光,每个像素独立发光 | 背光+液晶偏转,需要背光LED |
| 功耗 | 极低(无背光) | 较高(背光常亮) |
| 接口 | I2C 或 SPI | SPI(必须) |
| 典型驱动IC | SSD1306 | ST7735 |
OLED的好处是每个像素自己发光,所以黑色是真的黑,对比度极高。而且省电,做电池供电的设备很合适。TFT彩屏嘛,色彩丰富,显示细腻,但功耗大一些,而且必须要有背光。
再说触摸。咱们用的电容触摸按键模块,原理其实很简单——人体和地之间有个寄生电容,手指靠近电极时,这个电容会变化。触摸芯片检测到这个变化,通过I2C把按键状态告诉MCU。
1.2 I2C协议基础回顾
I2C协议,说白了就是两根线(SCL时钟、SDA数据)挂一堆设备。咱们的OLED和触摸模块都用这个协议。为什么选I2C?因为它引脚少,连线简单,适合这种数据量不大的场景。
回顾几个关键点:
- 主从结构: STM32是主机,OLED和触摸芯片都是从机。主机负责产生时钟、发起通信。
- 设备地址: 每个从机有唯一7位或10位地址。比如SSD1306的默认地址是0x3C(写)或0x3D(读)。
- 起始条件和停止条件: SCL高电平时,SDA从高到低是起始;SCL高电平时,SDA从低到高是停止。
- 应答机制: 每发送一个字节,接收方要拉低SDA表示应答(ACK)。没应答(NACK)意味着通信结束或设备异常。
I2C的通信流程大致是这样:
- 主机发送起始条件
- 主机发送从机地址+读写位(7位地址左移1位,最低位是R/W)
- 从机应答ACK
- 主机发送寄存器地址或命令字节
- 从机应答ACK
- 主机发送/接收数据字节,每字节后跟ACK
- 主机发送停止条件
咱们后面写驱动时,会反复用到这个流程。建议你现在就把它刻在脑子里。
1.3 所需硬件清单
工欲善其事,必先利其器。下面是我建议你准备的硬件:
| 硬件 | 型号/规格 | 数量 | 备注 |
|---|---|---|---|
| 开发板 | STM32F407VGT6 或 STM32F429IGT6 | 1 | F4系列,带硬件I2C外设 |
| OLED显示屏 | 0.96寸,SSD1306,I2C接口 | 1 | 注意买I2C版本,不是SPI |
| TFT彩屏 | 1.8寸,ST7735,SPI接口 | 1 | 带SD卡槽的版本更好 |
| 电容触摸模块 | TTP229 或 类似I2C触摸芯片 | 1 | 16通道或8通道均可 |
| 杜邦线 | 公对母、母对母 | 若干 | 建议买不同颜色区分信号 |
| 面包板 | 830孔 | 1 | 方便搭电路 |
| USB转TTL模块 | CH340G 或 CP2102 | 1 | 调试用串口输出 |
1.4 开发环境搭建
开发环境这块,我给大家两个选择:Keil MDK 和 STM32CubeIDE。我个人习惯用Keil,因为从ARM7时代就用它,顺手了。但STM32CubeIDE免费,而且集成了CubeMX配置工具,对新手更友好。
搭建步骤:
- 安装Keil MDK: 去Keil官网下载MDK-ARM,安装时注意勾选STM32F4系列器件包。如果你用Keil,记得装好对应的Pack。
- 安装STM32CubeIDE: 去ST官网下载,解压即用,不需要额外装驱动。它会自动识别STM32芯片。
- 安装串口驱动: 如果你用USB转TTL模块,需要装CH340或CP2102的驱动。不然串口打印看不到。
- 验证环境: 新建一个空工程,编译通过,下载到板子上,LED能闪——这就说明环境没问题了。
下面这张图,是我梳理的本课程知识体系。你可以先有个整体印象: