TouchGFX 工程的移植步骤(LTDC RGB 接口 LCD)

1. 引言
文档基于 STM32F746G_DISCO 硬件平台,参考从 TouchGFX Designer 下载的
STM32F746 的 TBS(TouchGFX Board Setup),讲解 STM32CubeMX 相关配置,介绍了 LTDC RGB 接口 LCD 的 TouchGFX 工程的移植步骤。
图1. TouchGFX Designer 中的 STM32F746G_DISCO TBS
在这里插入图片描述
2. STM32CubeMX 配置过程
STM32F746G_DISCO 有两个外部存储器,SDRAM 和 QSPI Flash,SDRAM 用于帧缓冲器,QSPI Flash 用于存储图片、字体等素材,其图形实现过程如图 1 所示。本文档参考从 TouchGFX Desinger 上下载的 TBS,第一步首先完成 IOC 文件的配置,由于会使用外部RAM 和外部Flash,生成代码后还需要添加相应的存储器驱动代码,以及修改链接文件。对于仅使用内部Flash 和内部RAM 的应用,用STM32CubeMX 和TouchGFX Desinger 生成代码后,就可以直接使用TouchGFX 点亮屏幕了。图2. 图形实现过程
图2. 图形实现过程地方
2.1. 新建IOC工程
双击打开STM32CubeMX软件,按照图中1-5步骤操作,MCU型号输入STM32F746NGH6 进行选择,其中第5步提示配置默认MPU单元来优化内核的推测性读取访问,请点击“YES”。
图3. 新建STM32CubeMX工程:
在这里插入图片描述
然后点击“Project Manager”,配置工程名称,如图所示。
图4. 配置工程名称
在这里插入图片描述
2.2. CORTEX_M7
这里使能ICACHE和DCACHE,并配置内存保护单元MPU,要正确配置MPU属性以避免由Cortex®-M7推测性读取访问和缓存维护引起的图形性能问题,使用STM32CubeMX可以轻松配置MPU存储器属性。详细配置过程可以参考AN4861 4.6小节 Special recommendations for Cortex-M7 (STM32F7/H7),其中介绍对嵌入了Cortex®-M7 CPU的STM32F7系列的一些建议,建议大家仔细阅读下。
2.3. CRC
CRC是循环冗余校验计算单元,如果要使用TouchGFX,必须要使能CRC,其配置保持默认即可。
图5. 使能CRC
在这里插入图片描述
2.4. DMA2D
DMA2D是AHB总线矩阵上的主设备,它将图形数据传输到内存,也可用于图形渲染,建议使用DMA2D来减轻CPU负载。DMA2D使能后保持默认配置即可,当需要DMA2D来进行图形加速时,TouchGFX引擎会自动调用DMA2D。
图6. 使能DMA2D
在这里插入图片描述
2.5. FMC配置
LTDC帧缓存区和Video缓冲区放在了外部SDRAM中。配置FMC相关参数时,需要对照原理图和SDRAM的datasheet,了解相关参数,然后进行配置。配置结束后,需要添加相应的驱动代码,将其配置内存映射模式。
图7. FMC配置
在这里插入图片描述
2.6. FREERTOS
TouchGFX可以运行在有RTOS和无RTOS的工程中,本工程移植的是带有RTOS,RTOS选择FreeRTOS,在本工程中新增了2个task,TouchGFXTask任务用于运行ToucGFX图形引擎,VideoTask任务用于进行Mjpeg视频的编解码,如果您的项目不用video控件,那么videoTask可以不用添加。
图8. FreeRTOS新增任务
在这里插入图片描述
注意新增总的堆空间大小,防止新建任务的栈大小不足。
图9. 堆空间大小配置
在这里插入图片描述
2.7. GPIO
在官方下载的TBS,配置的GPIO如图9所示。与LCD显示相关的引脚有2个,LCD_DISP和LCD_BL_CTRL。LCD_DISP用来启用/禁用显示待机模式,需要将LCD_DISP配置为高电平来启用显示器,否则显示器将保持待机模式。LCD_BL_CTRL信号上的高电平可以点亮背光,而低电平则将其关闭。
另外几个GPIO引脚可以用来测试性能的,它们的解释说明可以查看TouchGFXGPIO.cpp 中注释,其中RENDER_TIME,可以用来查看实际的渲染时间。
图10. GPIO配置
在这里插入图片描述
2.8. I2C3
STM32F746G_DISCO的电容LCD的触摸的接口是I2C3的PH7和PH8,相关参数的配置参数如图所示。
图11. I2C3配置
在这里插入图片描述
在这里插入图片描述
2.9. LIBJPEG
如果TouchGFX使用Video控件,要使能LIBJPEG,用于视频流的软件编解码。如果您的工程用不到Video控件,那么可以不用使能LIBJPEG。
图12. GPIO配置
在这里插入图片描述
2.10. LTDC
LTDC外设主要用来配置LCD显示接口,对于STM32F746G_DISCO的LCD可以参考下载的TBS进行配置。如果是其他型号的LCD,需要查看LCD的屏幕时序表进行配置。关于LTDC的layer,虽然在STM32CubeMX可以配置为2个layers,但是TouchGFX Designer是采用1个layer来做GUI开发的,这是因为2个layer会占用更多带宽。同时打开LTDC全局中断和错误中断。
图13. LTDC参数配置
在这里插入图片描述
图14. LTDC layer 配置
在这里插入图片描述
图15. 打开LTDC全局中断和错误中断
2.11. QUADSPI
当要存储的数据量相对较少时,可以使用内部FLASH存储器。否则,应将图形内容放置在外部存储器中。QUADSPI外接了一个128-Mbit Quad-SPI NOR Flash。
图16. QUADSPI配置
在这里插入图片描述
2.12. SYS
由于SysTick被RTOS使用,这里HAL库的时基选择TIM6。
图17. 系统时钟配置
在这里插入图片描述
2.13. X-CUBE-TOUCHGFX
Interface:接口选择Parallel RGB(LTDC)
对于RGB接口的LCD来说,通常无内置GRAM,FrameBuffer Strategy 无法使用Partial Buffer策略。在RAM足够时,可选择Double Buffer策略。存放位置选择By Allocation。这个可以通过链接文件配置放置在什么位置。
Application Tick Source:应用滴答时钟来源,选择LTDC,它的实现代码可以在TouchGFXGeneratedHAL.cpp中HAL_LTDC_LineEventCallback函数找到。
图18. TouchGFX 配置
在这里插入图片描述
2.14. Clock Configuration
系统时钟配置为216MHz,LTDC时钟配置为9.6MHz,这个LTDC时钟的配置是参考LCD时序参数表确定的,它与LCD的刷新率相关。
图19. 时钟树配置
在这里插入图片描述
至此,外设配置基本完成,选择所使用的IDE(这里选择的是STM32CubeIDE),点击Generate Code 按钮,生成代码。然后使用TouchGFX Designer打开TouchGFX文件夹下的ApplicationTemplate.touchgfx.part,在TouchGFX Designer中生成UI相关代码。
3. 添加驱动代码
对于LTDC接口的TouchGFX工程,使用TouchGFX Desiger生成代码后,如果仅使用内部RAM和Flash,那么在TouchGFX生成代码后,整个软件架构就建好了,可以使用TouchGFX来点亮屏幕了。
对于使用外部SDRAM、 QSPI Flash以及触摸功能的应用可以参考下载的TBS进行对照检查,添加相应的驱动代码和修改链接文件,完善整个工程代码后实现TouchGFX点亮LCD的效果。
3.1. 添加SDRAM驱动代码
查看下载的TBS,可以在main.c中的MX_FMC_Init()函数的用户代码区域看到添加的驱动代码。这里有一点要说明的是最后的FMC_Bank1->BTCR[0] = 0x000030D2代码是禁用FMC bank1,这点在AN4861 的4.6.1 Disable FMC bank1 if not used 有详细介绍。为了防止FMC bank1上的CPU推测性读取访问,建议在不使用时将其禁用。这
可以通过复位FMC_BCR1寄存器中的MBKEN位来完成,默认情况下该位在复位后使能。
3.2. 添加QSPI Flash驱动代码
添加驱动代码把QSPI Flash配置成memory mapped模式。
3.3. 添加Touch功能
触摸功能在STM32TouchController.cpp中实现,具体代码请参考TBS。
3.4. 修改链接文件
为了把帧缓冲区和视频缓冲放到外部SDRAM,把字体、图片等素材放到外部Flash,需要修改链接文件。不同的IDE,它的链接文件是不同的。对于STM32CubeIDE,它的链接文件是STM32F746NGHX_FLASH.ld,对于EWARM,它的链接文件是stm32f746xx_flash.icf,对于MDK-ARM,它的链接文件是STM32F746G_DISCO.sct,它们的语法略有不同。大家可以参考它的结构进行修改。
4. 小结
以上就是LTDC RGB接口 LCD的TouchGFX工程的移植步骤,本文档对关键步骤进行了解释说明,具体细节可参考AN4861和官方的TBS。

### TouchGFX 移植教程和指南 #### 了解TouchGFX组件及其功能 TouchGFX由多个重要部分组成,包括用于设计图形界面的TouchGFX Designer、作为CubeMX插件存在的TouchGFX Generator以及负责驱动UI应用的核心框架——TouchGFX引擎[^3]。 #### 移植准备阶段 为了顺利地将TouchGFX移植至新的硬件平台或操作系统环境之中,在开始之前需完成一系列准备工作。这通常涉及获取目标系统的开发工具链和支持库文件,并确保能够访问必要的文档资源来指导具体操作流程。对于RT-Thread而言,则还需要下载对应的版本并熟悉其集成开发环境(ENV)[^5]。 #### 创建新BSP(板级支持包) 当涉及到不同类型的MCU时,创建一个新的BSP是非常重要的一步。此过程可能依赖于特定厂商提供的模板或其他开源项目中的现有实现来进行定制化调整。例如,在STM32系列单片机上可以利用官方提供的HAL库简化底层接口适配工作;而对于RTOS的选择也会影响这部分的设计思路,像FreeRTOS就需要特别注意任务调度机制与显示刷新逻辑之间的协调配合[^1]。 #### 配置TouchGFX抽象层(AL) 借助TouchGFX Generator插件可以直接在STM32CubeMX内完成大部分基础设置项的选择,比如指定所使用的显示器型号、触摸屏控制器类型等参数。这些信息会被用来生成适用于当前项目的源代码片段,从而大大减少了手动编码的工作量。然而,如果是在非ST品牌的处理器平台上部署,则可能要自行编写相应的初始化函数以满足API要求。 #### 整合应用程序逻辑 一旦上述各环节都已妥善安排完毕之后,就可以着手把原先为其他设备编写的业务模块迁移到现有机型上了。此时需要注意的是保持原有交互体验的一致性,即尽可能沿用相似的操作方式和视觉风格。另外还需测试各种传感器输入响应是否正常运作,确保整体性能达到预期效果[^4]。 ```c++ // 示例:简单的TouchGFX应用程序入口点 #include "app_touchgfx.h" int main(void){ // 初始化LCD和其他外设... while (true) { MX_TouchGFX_Process(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值