这一章在干嘛?
TFT-LCD 实验:RGB 接口时序、FSMC 驱动 8080 接口、字库与图片显示、触摸。F407 通过 FSMC 直接驱动 16 位并口 LCD,速度比 SPI 快一个数量级。
20.1 TFT-LCD 简介
DMF407 配 ATK-4.3 寸 TFTLCD(800×480),16 位并口(8080 接口),由 STM32 FSMC 总线驱动。
原书图 20.1.1:ATK-4.3 TFTLCD 模块
8080 接口信号:
| 信号 | 方向 | 作用 |
|---|---|---|
| CS | 输入 | 片选 |
| RS | 输入 | 数据/命令选择 |
| WR | 输入 | 写使能 |
| RD | 输入 | 读使能 |
| DB[15:0] | 双向 | 数据线 |
| RST | 输入 | 复位 |
| BL | 输入 | 背光 |
FSMC 控制 8080 原理:FSMC 把外部 SRAM 的写时序映射到 LCD 命令/数据。
- 写命令:
*(uint16_t *)0x6C000000 = cmd; - 写数据:
*(uint16_t *)0x6C000002 = data;
FSMC 地址线 A23 高低区分命令/数据:所以 A23=0 写命令,A23=1 写数据。
20.2 硬件设计
FSMC 引脚映射:
| FSMC 信号 | STM32 引脚 | 说明 |
|---|---|---|
| D[15:0] | PDx/PDx/… | 数据总线 |
| NE4 | PG12 | 片选 CS |
| NOE | PD4 | 读 RD |
| NWE | PD5 | 写 WR |
| A23 | PD13 | RS(命令/数据) |
| BL | PB5 | 背光 PWM |
原书图 20.2.1:FSMC 与 LCD 引脚映射
20.3 程序设计
20.3.1 FSMC 配置
CubeMX 配置 FSMC:
- NOR Flash/PSRAM
- Sub-bank:Bank1 NOR 4
- Memory type:SRAM
- Data width:16 bit
- Write operation:Enabled
- Address/Data multiplexing:Disabled
20.3.2 LCD 驱动初始化
- 背光开;
- 读 ID(常用 ILI9488/NT35510);
- 根据 ID 选择驱动序列(厂家提供);
- 设置扫描方向 / 显示模式。
20.3.3 关键 API
void LCD_Init(void); // 初始化
void LCD_DisplayOn(void); // 开显示
void LCD_Clear(uint16_t color); // 全屏清色
void LCD_Fill(x0,y0,x1,y1, color); // 矩形填充
void LCD_DrawLine(x0,y0,x1,y1, color); // 画线
void LCD_ShowChar(x, y, ch, size, color, bk); // 显示字符
void LCD_ShowString(x, y, str, size, color, bk); // 显示字符串
void LCD_ShowNum(x, y, num, len, size, color, bk);
void LCD_ShowChinese(x, y, str, color, bk); // 显示汉字(外部字库)
原书图 20.3.3.1:LCD 显示字符字模示例
原书图 20.3.3.2:FSMC 8080 写时序图
20.3.4 触摸(I2C 或 SPI)
ATK-4.3 屏支持触摸(FT5206/GT9147),通过 I2C 通信,INT 引脚触发中断读取坐标。
清屏比画图快 100 倍:调试时用 LCD_Clear 代替反复刷屏,肉眼可见不卡顿。
20.4 下载验证
烧录后屏幕显示红绿蓝白四色 + 字符串 + 数字 + 汉字;触摸可以读到坐标。
不同 LCD 厂家驱动代码不同:拿到屏幕先读 ID,再选驱动序列,否则初始化失败显示白屏。
FSMC 驱动 LCD 时,命令地址与数据地址如何区分?
用 FSMC 地址线 A23:A23=0 写命令,A23=1 写数据。
8080 接口最少需要多少根线?
CS / RS / WR / RD / D[15:0] / RST = 至少 21 根(含数据和电源)。
TFTLCD 显示汉字需要什么?
外部字库(GBK 取模数组)。