扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

STM32F7 LTDC RGB接口TouchGFX工程移植全流程:从 CubeMX 配置到屏幕点亮

01/29 15:24
774
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

STM32F7 系列通过 LTDC(LCD-TFT 显示控制器)驱动 RGB 接口 LCD 时,TouchGFX 工程移植的核心是 “CubeMX 外设配置 + 外部存储驱动 + 链接文件调整”。本文基于 ST 官方 LAT1392 应用笔记,以 STM32F746G_DISCO 开发板为例,详解从 CubeMX 配置、驱动添加到 UI 生成的完整步骤,适配外部 SDRAM(帧缓冲)、QSPI Flash(素材存储)场景,新手也能快速点亮屏幕。

1. 核心前提与硬件基础

1.1 硬件环境

  • 主控:STM32F746NGH6(Cortex-M7 内核);
  • 存储:外部 SDRAM(帧缓冲 / 视频缓冲)、QSPI NOR Flash(图片 / 字体存储);
  • LCD:RGB 接口(无内置 GRAM),触摸接口 I2C3(PH7/PH8);
  • 核心外设:LTDC(显示控制)、DMA2D(图形加速)、FMC(SDRAM 控制)、QUADSPI(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”,勾选 “配置默认 MPU”(优化 Cortex-M7 推测性读取);
  2. 配置工程名称与路径,选择 STM32CubeIDE 作为目标 IDE。

2.2 核心外设配置(必选项)

(1)CORTEX-M7 内核配置

  • 使能 ICACHE 和 DCACHE(提升图形处理性能);
  • 配置 MPU:参考 AN4861 4.6 小节,优化内存访问属性,避免缓存冲突。

(2)CRC 使能(强制要求)

  • TouchGFX 引擎依赖 CRC 校验单元,直接启用,保持默认配置即可。

(3)DMA2D 配置(图形加速)

  • 启用 DMA2D(AHB 总线主设备),保持默认参数;
  • 作用:自动承担图形渲染与数据传输,减轻 CPU 负载,TouchGFX 会自动调用。

(4)FMC 配置(SDRAM 控制)

  • 用途:LTDC 帧缓冲、视频缓冲存于外部 SDRAM;
  • 配置要点:对照 SDRAM datasheet 和原理图,设置时序参数,生成代码后需添加驱动(后续步骤);
  • 关键注意:不使用 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 控件可删除);
  • 注意:调整 “TOTAL HEAP SIZE”,避免任务栈空间不足。

(7)其他关键外设

  • GPIO:配置 LCD_DISP高电平启用显示)、LCD_BL_CTRL(高电平点亮背光)为输出;
  • I2C3:启用触摸接口,保持默认时序(适配电容屏触摸 IC);
  • QUADSPI:启用 QSPI Flash,配置为内存映射模式(素材存储用);
  • SYS:时基选择 TIM6(SysTick 被 RTOS 占用);
  • X-CUBE-TOUCHGFX:接口选 “Parallel RGB (LTDC)”,帧缓冲策略选 “Double 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[0] = 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 文件)、KEIL(.sct 文件)按对应语法调整,核心是 “地址与存储类型匹配”。

5. 第四步:TouchGFX UI 生成与代码整合

  1. 打开 TouchGFX Designer,导入工程中 “TouchGFX/ApplicationTemplate.touchgfx.part” 文件;
  2. 设计 UI 界面(如按钮、图片、文本),生成代码(菜单栏 “Generate Code”);
  3. 代码整合:生成的 UI 代码会自动加入工程,无需手动拷贝;
  4. 关键检查:TouchGFXGeneratedHAL.cppHAL_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 开发需求。

相关推荐