STM32F7 LTDC RGB接口TouchGFX工程移植全流程:从 CubeMX 配置到屏幕点亮
STM32F7 系列通过 LTDC(LCD-TFT 显示[控制器](https://www.eefocus.com/baike/1544287.html))驱动 RGB 接口 LCD 时,TouchGFX 工程移植的核心是 “CubeMX 外设配置 + 外部存储驱动 + 链接文件调整”。本文基于 ST 官方 LAT1392 应用笔记,以 STM32F746G\_DISCO [开发板](https://www.eefocus.com/tag/%E5%BC%80%E5%8F%91%E6%9D%BF/)为例,详解从 CubeMX 配置、驱动添加到 UI 生成的完整步骤,适配外部 (https://www.eefocus.com/baike/1552468.html)(帧缓冲)、Q(https://www.eefocus.com/baike/496252.html) Flash(素材存储)场景,新手也能快速点亮屏幕。### 资料获取:[【应用笔记】LAT1392 LTDC RGB接口 LCD的TouchGFX工程的移植步骤](https://shequ.stmicroelectronics.cn/thread-642660-1-13.html)
## 1. 核心前提与硬件基础
### 1.1 硬件环境
* 主控:STM32F746NGH6(Cortex-M7 内核);
* 存储:外部 SDRAM(帧缓冲 / 视频缓冲)、QSPI NOR Flash(图片 / 字体存储);
* LCD:RGB 接口(无内置 GRAM),触摸接口 (https://www.eefocus.com/tag/I2C/)3(PH7/PH8);
* 核心外设:LTDC(显示控制)、(https://www.eefocus.com/tag/DMA/)2D(图形加速)、FMC(SDRAM 控制)、QU(https://www.eefocus.com/baike/495854.html)PI(Flash 控制)。
### 1.2 工具清单
* 软件:STM32CubeMX 6.10.0、STM32CubeIDE 1.13.2、TouchGFX Designer 4.23.0;
* 参考文档:AN4861(LTDC 配置指南)、TouchGFX Board Setup(TBS)。
## 2. 第一步:STM32CubeMX 核心配置(关键基础)
按以下顺序完成配置,确保外设兼容 TouchGFX 引擎,避免**性能问题:
### 2.1 工程创建与 MCU 选型
1. 新建工程,搜索 “STM32F746NGH6”,勾选 “配置默认 (https://www.eefocus.com/article/503831.html)”(优化 Cortex-M7 推测性读取);
2. 配置工程名称与路径,选择 STM32CubeIDE 作为目标 IDE。
### 2.2 核心外设配置(必选项)
#### (1)CORTEX-M7 内核配置
* 使能 ICACHE 和 DCACHE(提升图形处理性能);
* 配置 MPU:参考 AN4861 4.6 小节,优化内存访问属性,避免缓存冲突。
#### (2)CRC 使能(强制要求)
* TouchGFX 引擎依赖 CRC 校验单元,直接启用,保持默认配置即可。
#### (3)DMA2D 配置(图形加速)
* 启用 DMA2D(AHB [总线](https://www.eefocus.com/baike/1542179.html)主设备),保持默认参数;
* 作用:自动承担图形渲染与[数据传输](https://www.eefocus.com/tag/%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93/),减轻 (https://www.eefocus.com/baike/1552575.html) 负载,TouchGFX 会自动调用。
#### (4)FMC 配置(SDRAM 控制)
* 用途:LTDC 帧缓冲、视频缓冲存于外部 SDRAM;
* 配置要点:对照 SDRAM datasheet 和[原理图](https://www.eefocus.com/tag/%E5%8E%9F%E7%90%86%E5%9B%BE/),设置时序参数,生成代码后需添加驱动(**步骤);
* 关键注意:不使用 FMC bank1 时,需禁用(复位 MBKEN 位),避免 CPU 推测性读取干扰。
#### (5)LTDC 配置(显示核心)
1. 基础参数:接口选择 “Parallel RGB”,启用全局中断和错误中断;
2. Layer 配置:仅用 1 层(TouchGFX 默认单图层,节省带宽),参数如下:
* 窗口尺寸:水平 0-480、垂直 0-272(适配屏幕分辨率);
* 像素格式:RGB565;
* 帧缓冲地址:0xC0000000(SDRAM 起始地址);
* 混合因子:Alpha=255(不透明);
3. 时钟配置:LTDC 时钟 = 9.6MHz(与屏幕刷新率匹配,参考屏幕时序表)。
#### (6)FreeRTOS 配置(可选,推荐)
* 启用 FreeRTOS,新增 2 个任务:
* TouchGFXTask:运行 TouchGFX 图形引擎;
* VideoTask:视频编解码(无需 Video 控件可删除);
* 注意:调整 “T(https://www.eefocus.com/baike/495949.html)L HEAP SIZE”,避免任务栈空间不足。
#### (7)其他关键外设
* (https://www.eefocus.com/tag/GPIO/):配置 LCD\_D(https://www.eefocus.com/tag/ISP/)([高电平](https://www.eefocus.com/tag/%E9%AB%98%E7%94%B5%E5%B9%B3/)启用显示)、LCD\_BL\_CTRL(高电平点亮背光)为输出;
* I2C3:启用触摸接口,保持默认时序(适配[电容屏](https://www.eefocus.com/baike/491071.html)触摸 IC);
* QUADSPI:启用 QSPI Flash,配置为内存映射模式(素材存储用);
* SYS:时基选择 TIM6(SysTick 被 RTOS 占用);
* X-CUBE-TOUCHGFX:接口选 “Parallel RGB (LTDC)”,帧缓冲策略选 “Dou(https://www.eefocus.com/tag/ble/) Buffer”(无 GRAM 屏幕必选),应用滴答时钟来源选 “LTDC”。
### 2.3 时钟配置
* 系统时钟:216MHz(Cortex-M7 最大稳定频率);
* 外设时钟:LTDC 时钟 = 9.6MHz(通过时钟树分频得到,匹配屏幕要求)。
### 2.4 生成代码
配置完成后点击 “Generate Code”,CubeMX 会生成基础工程框架,**需补充驱动与配置。
## 3. 第二步:添加关键驱动代码(外部存储适配)
仅用内部存储(Flash/RAM)可跳过此步,使用外部 SDRAM/QSPI Flash 需添加以下驱动:
### 3.1 SDRAM 驱动(FMC 配置)
在`MX_FMC_Init()`函数的用户代码区添加驱动,核心是配置内存映射模式:
```
// 禁用FMC bank1(未使用时)
FMC_Bank1->BTCR = 0x000030D2;
// 补充SDRAM初始化时序代码(参考TBS,适配具体SDRAM型号)
```
* 作用:使 STM32 能正常访问 SDRAM,帧缓冲数据可写入 / 读取。
### 3.2 QSPI Flash 驱动
添加 QSPI 初始化代码,配置为 “memory mapped 模式”:
* 核心功能:让 TouchGFX 直接读取 QSPI 中的图片、字体素材,无需拷贝到 RAM。
### 3.3 触摸功能实现
在`STM32TouchController.cpp`中添加 I2C3 触摸驱动:
* 实现`init()`(触摸 IC 初始化)、`sample()`(读取触摸坐标)函数,参考 TouchGFX TBS 模板。
## 4. 第三步:修改链接文件(存储分配)
需将不同数据分配到对应存储区域,不同 IDE 链接文件格式不同,以 STM32CubeIDE 为例(`STM32F746NGHX_FLASH.ld`):
1. 帧缓冲 / 视频缓冲:分配到外部 SDRAM(地址 0xC0000000 起);
2. 图片 / 字体素材:分配到 QSPI Flash(按实际 Flash 地址配置);
3. 代码 / 全局变量:默认内部 Flash / 内部 RAM。
* 示例(SDRAM 分配):
```
.frame_buffer : {
. = ALIGN(8);
*(.frame_buffer)
. = ALIGN(8);
} >SDRAM AT>SDRAM
```
* 其他 IDE:IAR(.icf 文件)、(https://www.eefocus.com/baike/495948.html)(.sct 文件)按对应语法调整,核心是 “地址与存储类型匹配”。
## 5. 第四步:TouchGFX UI 生成与代码整合
1. 打开 TouchGFX Designer,导入工程中 “TouchGFX/ApplicationTemplate.touchgfx.part” 文件;
2. 设计 UI 界面(如按钮、图片、文本),生成代码(菜单栏 “Generate Code”);
3. 代码整合:生成的 UI 代码会自动加入工程,无需手动拷贝;
4. 关键检查:`TouchGFXGeneratedHAL.cpp`中`HAL_LTDC_LineEventCallback`函数是否正常实现(滴答时钟来源)。
## 6. 关键注意事项
1. LTDC 图层选择:TouchGFX 默认单图层,双图层会占用更多带宽,不推荐;
2. 帧缓冲策略:RGB 接口无 GRAM 屏幕,不可用 “Partial Buffer”,优先选 “Double Buffer”(避免画面撕裂);
3. FMC bank1 禁用:未使用时必须复位 MBKEN 位,否则 Cortex-M7 推测性读取会导致性能问题;
4. 时钟匹配:LTDC 时钟需与 LCD 刷新率一致,否则会出现花屏、闪屏;
5. 堆空间充足:FreeRTOS 任务栈不足会导致 TouchGFXTask 启动失败,需合理配置 “TOTAL HEAP SIZE”。
STM32F7 LTDC RGB 接口 TouchGFX 移植的核心流程可概括为:
1. CubeMX 配置:启用关键外设(LTDC/DMA2D/CRC/FMC 等),匹配硬件时序;
2. 驱动补充:外部 SDRAM/QSPI/ 触摸驱动,确保存储可访问;
3. 链接文件调整:数据分配到对应存储区域;
4. UI 生成:TouchGFX Designer 设计并生成代码。
按此流程操作,即可完成从工程创建到屏幕点亮的全流程,适配大多数 RGB 接口 LCD 的 TouchGFX 开发需求。
页:
[1]