电子产业一站式赋能平台

PCB联盟网

搜索
查看: 64|回复: 0
收起左侧

TouchGFX 更新到4.25,模拟帧缓冲技术加持让 “单芯片” 实现骚气GUI的梦想成真

[复制链接]

26

主题

26

帖子

766

积分

二级会员

Rank: 2

积分
766
发表于 2025-3-4 23:59:00 | 显示全部楼层 |阅读模式
ST(意法半导体)日前宣布 TouchGFX 更新到了 4.25 版本,TouchGFX是ST提供的一个免费图形用户界面(GUI)框架,专为STM32微控制器设计。它允许开发者在资源受限的嵌入式系统上创建流畅、专业的用户界面,从而大幅提升产品的用户体验。
TouchGFX最初是由丹麦公司Draupner Graphics开发的嵌入式图形用户界面框架。2018年5月ST宣布收购TouchGFX,将这一先进的GUI技术整合到其STM32生态系统中。这次收购是ST战略的重要组成部分,旨在为其微控制器产品线增加更强大的图形界面能力。
自ST收购以来,TouchGFX经历了显著发展:
与STM32生态系统的深度整合
  • 2019年: TouchGFX被完全整合到STM32 Cube软件生态系统中
  • 开发了TouchGFX Generator插件,与STM32CubeMX无缝配合
  • 增强了对ST专有硬件加速器(如Chrom-ART)的支持

    软件版本迭代与功能扩展
  • TouchGFX 4.12 (约2019年): 引入部分帧缓冲技术
  • TouchGFX 4.15 (约2020年): 添加动态图表支持
  • TouchGFX 4.18/4.20 (2021年): 增加视频支持和自定义容器导出功能
  • TouchGFX 4.21 (2022年): 推出TouchGFX Stock资产库和SVG支持
  • TouchGFX 4.22-4.24 (2022-2024年): 增强L8压缩、离线模式、更快的闪存编程

    现在,TouchGFX 来到了 4.25版本,推出了革命性的模拟帧缓冲(emulated framebuffer)技术位图字体压缩技术
    模拟帧缓冲(emulated framebuffer):以单芯片实现复杂GUI的关键突破TouchGFX 4.25最引人注目的创新是正在进行专利申请中的模拟帧缓冲技术。传统上,显示图形界面需要在内存中保存完整的帧缓冲区,这对资源有限的MCU是个巨大挑战。以一个720p显示器为例,标准24位色彩的单帧缓冲就需要约4MB内存,这往往超出了单个MCU的能力范围,迫使开发者需要添加外部的RAM作为缓存,从而增加了系统复杂性和成本。
    帧缓冲策略在嵌入式系统图形开发中,帧缓冲技术是渲染图像的基础,但很多开发者往往忽视了帧缓冲策略的选择对内存配置的深远影响,这可能是一个代价高昂的错误,因为帧缓冲的类型将极大地影响内存配置。
    双帧缓冲双帧缓冲技术使用两个完整的帧缓冲区同时存储在内存中,当显示器显示一个缓冲区的内容时,系统可以在另一个缓冲区中渲染下一帧图像。一旦新帧准备就绪,系统会进行"缓冲区交换",让显示器开始读取新完成的帧,同时在之前显示的缓冲区中准备再下一帧。
    这种"乒乓"机制确保了用户始终看到完整的、已渲染好的图像,有效避免了"屏幕撕裂"现象——当显示器在单缓冲系统中读取半成品帧时出现的视觉伪影。双帧缓冲为动画和交互提供了流畅的视觉体验,被广泛应用于需要高质量图形显示的系统中。
    然而,10英寸显示器上的24位色深1024×600分辨率图像将需要近4MB的内存,这对于像MCU这种资源受限的系统来说通常是不可想象的。这就是为什么双帧缓冲只有在考虑大型显示器和高级图形界面时才有意义,因为此类系统自然会使用大容量的外部RAM。
    对于资源更受限的系统,开发者需要考虑如单帧缓冲配合优化的刷新机制、部分帧缓冲(只更新变化区域)等优化策略。
    单帧缓冲单帧缓冲技术,顾名思义,仅使用一个完整的帧缓冲区来存储显示图像。系统直接在这个缓冲区中进行图像更新,同时显示器也从这个同一缓冲区读取数据进行显示。这种设计最直接的好处是内存使用量减少一半,这对于RAM资源紧张的MCU系统来说是一项显著优势。
    但单帧缓冲最大的挑战是可能出现"屏幕撕裂"现象——当显示器在系统更新缓冲区内容的中途读取数据时,用户会看到部分旧帧和部分新帧的混合图像。然而,在许多MCU应用中,这一问题可以通过多种策略有效缓解:
  • 简化动画复杂度:减少每帧的变化量,或使用渐变等较为平滑的过渡效果,可以使撕裂现象不那么明显。
  • 降低刷新频率:确保显示内容更新速度更适合系统处理能力,避免在频繁更新中产生撕裂。
  • 利用硬件加速:STM32微控制器上的DMA2D加速器(Chrom-ART)能够高效处理图形数据传输和简单处理,大幅提升渲染速度,减少缓冲区处于"半更新"状态的时间窗口。
  • 垂直同步优化:在可能的情况下,将缓冲区更新与显示器的垂直同步信号对齐,确保在显示器不读取数据时进行更新。
  • 局部更新策略:只更新屏幕上发生变化的部分,而非整个帧,减少处理时间和撕裂机会。
    单帧缓冲技术在中端嵌入式系统中应用广泛,特别适合:
  • 小尺寸显示器:较小的显示分辨率意味着更小的缓冲区大小和更快的更新速度。
  • 中等复杂度UI:信息显示为主、动画较少的界面,如家电控制面板、工业监控设备等。
  • 静态内容为主的应用:如果界面主要显示静态内容,偶尔更新,撕裂风险就大大降低。
    在实际产品中,许多使用STM32 F4/F7/H7系列的中端设备采用单帧缓冲设计,搭配适当的优化策略,已能提供相当不错的用户体验,同时保持系统资源的高效利用。部分帧缓冲类似地,另一个选择是使用部分帧缓冲,这是在TouchGFX 4.12中引入的技术。 顾名思义,内存只存储必须更新的帧缓冲部分,这进一步缩小了内存占用。然而,这种技术要求显示器具有能够存储整个帧缓冲的图形RAM(GRAM)。原因是当需要渲染图像时,显示器将需要整个帧缓冲。因此,虽然可以通过仅使用部分帧缓冲来减少所需的嵌入式RAM数量,但无法绕过显示器在其GRAM中需要整个帧缓冲的事实。
    模拟帧缓冲技术模拟帧缓冲是一种内存管理技术,它的工作原理类似于部分帧缓冲,但最大的区别在于不需要实际的图形RAM(GRAM)。它利用内存管理单元(MMU)通过映射内存地址来"欺骗"系统,使系统认为存在完整的帧缓冲。
    模拟帧缓冲利用了某些STM32 MCU(如STM32H7R/S、STM32H7A/B、STM32U5和新发布的STM32N6)中的LCD-TFT显示控制器(LTDC)和Chrom-GRC IP的图形内存管理单元。当系统查找帧缓冲数据时,MMU知道应该发送什么内容,从而实现了帧缓冲的"模拟"效果。LTDC控制器会不断读取MMU写入的像素数据,并通过Parallel RGB或MIPI DSI等接口将模拟帧缓冲数据发送到显示器。这个过程需要足够快(通常每16毫秒刷新一次屏幕),否则会出现图像撕裂现象。
    模拟帧缓冲技术在MCU系统中的应用模拟帧缓冲在MCU系统中有以下几个重要应用:
  • 节省内存资源:不需要专门的外部RAM来存储完整帧缓冲,可以仅使用MCU内部的RAM。
  • 降低系统成本:由于不需要外部RAM,可以实现单芯片设计,直接降低物料成本。
  • 提升显示能力:使MCU能够驱动更高分辨率的显示屏。例如,720p或1080p显示屏上的丰富UI现在可以在MCU上运行,而不需要升级到微处理器。
  • 适用于静态UI:对于显示相对静态内容、仅偶尔更新的界面(如状态显示、信息面板等),模拟帧缓冲非常适合。
    [/ol]使用限制和建议模拟帧缓冲并非适用于所有应用场景:
  • 主要适合静态UI,不适合有大量动画的应用
  • 如果出现屏幕撕裂,应视为系统提示,需要减少动画或更改帧缓冲策略
  • 开发者应在兼容的开发平台(如STM32H7S78-DK)上实验,确定最适合的帧缓冲策略
    在实际测试中,一个电梯UI能够在720p显示屏和STM32H7上运行,仅使用嵌入式RAM,这在模拟帧缓冲技术出现之前是无法实现的。

    crtllocirhc640584924.jpg

    crtllocirhc640584924.jpg

    除了模拟帧缓冲技术之外,TouchGFX 4.25中还引入了位图字体压缩技术,以减少UI的内存占用。当系统因性能原因必须使用位图时,此功能作为矢量字体的替代方案。在实际应用中,新的压缩将位图字体的占用空间减少了20%到80%。例如,具有许多中文字符的字体可以看到大小减少40%,而非常大的字体,如110点的Verdana,但字符数量少,可以从约40KB减少到内存中只有8KB。
    TouchGFX的新版本还增加了CMake和iAR 9支持,以优化工作流程。 CMake是一套开源工具,使开发人员能够构建、测试和打包他们的软件。因此,它将帮助工程师将他们的项目移植到多个平台,并与团队成员共享,以简化开发操作。
    参考来源
    https://blog.st.com/touchgfx/?ecmp=tt42624_gl_social_feb2025
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表