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上拉电阻选错,导致通信时好时坏。标准模式下上拉电阻一般选4.7kΩ,快速模式可以降到2.2kΩ。总线电容大时,电阻要更小。这个后面调试章节会细讲。

I2C的通信流程大致是这样:

  1. 主机发送起始条件
  2. 主机发送从机地址+读写位(7位地址左移1位,最低位是R/W)
  3. 从机应答ACK
  4. 主机发送寄存器地址或命令字节
  5. 从机应答ACK
  6. 主机发送/接收数据字节,每字节后跟ACK
  7. 主机发送停止条件

咱们后面写驱动时,会反复用到这个流程。建议你现在就把它刻在脑子里。

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 调试用串口输出
注意: 买OLED时一定要确认是I2C接口。市面上很多0.96寸OLED是SPI接口的,引脚定义完全不同。我吃过这个亏,买回来发现引脚对不上,又得重新买。

1.4 开发环境搭建

开发环境这块,我给大家两个选择:Keil MDK 和 STM32CubeIDE。我个人习惯用Keil,因为从ARM7时代就用它,顺手了。但STM32CubeIDE免费,而且集成了CubeMX配置工具,对新手更友好。

搭建步骤:

  1. 安装Keil MDK: 去Keil官网下载MDK-ARM,安装时注意勾选STM32F4系列器件包。如果你用Keil,记得装好对应的Pack。
  2. 安装STM32CubeIDE: 去ST官网下载,解压即用,不需要额外装驱动。它会自动识别STM32芯片。
  3. 安装串口驱动: 如果你用USB转TTL模块,需要装CH340或CP2102的驱动。不然串口打印看不到。
  4. 验证环境: 新建一个空工程,编译通过,下载到板子上,LED能闪——这就说明环境没问题了。
小建议: 不管你用哪个IDE,都建议装一个串口调试助手。后面调试I2C通信时,靠串口打印数据是最直接的调试手段。我用的是SSCOM,轻量好用。

下面这张图,是我梳理的本课程知识体系。你可以先有个整体印象:

课程知识体系总览 LCD驱动与触摸检测 显示驱动 触摸检测 I2C协议移植 OLED SSD1306 TFT ST7735 电容触摸原理 TTP229驱动 I2C时序 STM32 HAL库 硬件I2C vs 模拟I2C 调试与示波器 说明:本课程从显示驱动入手,逐步深入触摸检测,最后聚焦I2C协议移植与调试技巧 每章都配有可运行的代码示例和实际项目中的避坑经验