这一章在干嘛?

TFT-LCD 实验:RGB 接口时序、FSMC 驱动 8080 接口、字库与图片显示、触摸。F407 通过 FSMC 直接驱动 16 位并口 LCD,速度比 SPI 快一个数量级。

20.1 TFT-LCD 简介

20.2 硬件设计

20.3 程序设计

20.4 下载验证

20.1 TFT-LCD 简介

DMF407 配 ATK-4.3 寸 TFTLCD(800×480),16 位并口(8080 接口),由 STM32 FSMC 总线驱动。

原书图 20.1.1:ATK-4.3 TFTLCD 模块原书图 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/…数据总线
NE4PG12片选 CS
NOEPD4读 RD
NWEPD5写 WR
A23PD13RS(命令/数据)
BLPB5背光 PWM

原书图 20.2.1:FSMC 与 LCD 引脚映射原书图 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 驱动初始化

  1. 背光开;
  2. 读 ID(常用 ILI9488/NT35510);
  3. 根据 ID 选择驱动序列(厂家提供);
  4. 设置扫描方向 / 显示模式。

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.1:LCD 显示字符字模示例

原书图 20.3.3.2:FSMC 8080 写时序图原书图 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,再选驱动序列,否则初始化失败显示白屏。