[信息] 实战经验 | 通过GFXMMU实现TouchGFX画面垂直镜像

[复制链接]
665|2
STM新闻官 发表于 2025-11-15 22:43 | 显示全部楼层 |阅读模式
本帖最后由 STM新闻官 于 2025-11-15 22:51 编辑

01引言
某客户项目需要在正常显示的基础上,增加垂直方向镜像特性,目标MCU是STM32L4R9。客户希望能够从硬件层面实现这个特性,避免引入两套UI资源和代码增加资源占用。

02调研
STM32L4R9的GFXMMU外设原本用于减少非矩形显示面板的帧缓存占用,大致思路是将帧缓存按照物理显示的形状映射到一个虚拟空间,形状通过LUT来描述。对该虚拟空间的访问,会通过LUT来判断是否会被映射到物理内存,以及具体位置。如果把Chrom-GRC中的第一段映射到Frame Buffer中的倒数第一行,第二段映射到倒数第二行,以此类推,Frame Buffer中的图像,在CFXMMU的虚拟空间中就是按照垂直镜像的方式存在的。我们可以通过反序加载GFXMMU的 LUT来实现这个功能。
16096691893037f5af.png
图1. Chrom-GRC基本原理

03实现
STM32L4R9-Discovery板自带一块390x390分辨率的LCD。我们首先在GFXMMU中开辟一块空间(0-389行)按正序加载LUT;再开辟第二块空间(390-779)按反序加载LUT。然后将LTDC Frame Buffer地址向后偏移390行指向第二块空间。这样当LTDC取Frame Buffer第一行数据时,会被映射到物理内存的倒数第一行;取Frame Buffer第二行数据时,会被映射到物理内存的倒数第二行;以此类推,最终在屏幕上呈现出垂直镜像的效果。关键代码见图2,详细代码请参考演示工程。运行结果见图3。

364696918932e12b77.png
▲ 图2. 反序加载LUT,调整LTDC Frame Buffer 地址

30346918933fe625c.png
▲ 图3. 运行结果(左:正常显示,右:垂直镜像)

04小结
通过GFXMMU外设,可以实现显示垂直镜像而无需要引入额外工作量。

点击按钮下载《通过GFXMMU实现TouchGFX画面垂直镜像》原文档。
点击下载

 楼主| STM新闻官 发表于 2025-11-15 22:52 | 显示全部楼层
 楼主| STM新闻官 发表于 2025-11-15 22:52 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:您的嵌入式应用将得益于意法半导体领先的产品架构、技术、多源产地和全方位支持。意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器。

1439

主题

1790

帖子

25

粉丝
快速回复 在线客服 返回列表 返回顶部