▲
点击上方 关注
STM32
我们从直播答疑中选一些比较有代表性的提问在这里与大家分享,供大家回顾。
Q:TouchGFX可以免费商用吗?
A:TouchGFX是可以免费商用的,此外TouchGFX提供了一个包含数千即用型免费图形的资源库TouchGFX Stock,包括背景、图标、控件等,用户可以调整素材大小以适应其界面,使用方便灵活,即使是商用项目,这些素材都可以免费在STM32上使用。
Q:TouchGFX的学习资料在哪里?如何实现快速上手?
A:BiliBili已经推出
《STM32&X-Cube-TouchGFX GUI开发实践》
在线课程,并且会持续更新。点击进入>>
STM32中文官网GUI相关资料
。并且TouchGFX Documentaion文档也是学习TouchGFX的资料库,可以观看中文版本,并且资料库也在不断更新。TouchGFX Designer上的例程也是学习TouchGFX的最好教程,如果您手上有ST的开发板,那么就可以从TouchGFX Designer上快速开始GUI工程的开发。
Q:TouchGFX是如何实现前端(UI显示)与后台进行数据交互的?
A:TouchGFX数据通讯采用的是MVP架构,model充当与后端数据交换的接口,在当前Screen界面来回传递信息。View包含了当前显示的所有控件,Presenter 接收来自Model的后端事件,以及来自VIEW的UI事件。您可以看下B站视频的UI应用开发之MVP模型来详细的了解这个过程。
Q:TouchGFX支持哪些操作系统?STM32 MCU的图形处理是如何与实时操作系统(RTOS)协同工作的?
A:TouchGFX支持多种操作系统以及不带操作系统,在TouchGFX Designer上下载的demo 有FreeRTOS、ThreadX、No OS例程可以参考。如果有RTOS,TouchGFX 通常会运行在一个专门的任务中,这个任务负责处理所有的图形更新和事件处理,可以通过消息队列,信号量等进行不同任务间的通讯。点击查看
>>
显示屏的蓝牙扬声器多任务示例
。
Q:ST有专门的文件或链接介绍不同MCU支持的分辨率吗?
Q:X-NUCLEO-GFX01M2和GFX02Z1支持哪些NUCLEO板?
A:GFX01M2是SPI接口的GUI扩展板,适用于Nucleo-64的板卡,目前G071、H503、U083、WB55的NUCLEO板提供了TBS。GFX02Z1是MCU 8080接口的GUI扩展版,适用于Nucleo-144引脚的板块,目前H563,U575的NUCLEO板提供了TBS,TouchGFX上有对应的240x320分辨率的UI demo,可以直接导入查看运行效果。两个扩展板均搭载了2.2寸LCD,64Mbit NOR Flash和一个控制杆。
Q:TouchGFX支持哪些显示接口?
A:TouchGFX支持任何显示接口,STM32微控制器支持包括Motorola6800、Intel 8080、SPI、QSPI、RGB-TFT和MIPI-DSI等接口 , 点击
参考文档
。
Q:TouchGFX生成代码资源占用率如何,如何减少素材的Flash占用空间?
A:TouchGFX是轻量级的图形框架,通过静态内存分配、部分帧缓冲区、压缩图像资源、高效的渲染算法、优化的字体和文本管理以及资源管理等多种技术手段,最大限度地减少了 RAM 和 Flash 的占用。静态内存分配在编译时确定内存需求,避免了运行时的动态内存分配,从而减少了内存碎片和管理开销。TouchGFX 支持部分帧缓冲区技术,这意味着可以使用较少的内存作为帧缓冲,无需使用完整的单帧缓冲区。TouchGFX通过矢量字体,矢量图片,RGB压缩,L8图片压缩等多种技术帮助客户减少Flash占用率。
Q:TouchGFX图片的压缩和解压缩是如何实现的,对性能的影响如何?
A:
TouchGFX支持RGB图像和L8图像的压缩以及支持矢量图片和矢量字体,可以大大减少Flash存储空间。RGB图像和L8图像的压缩是TouchGFX Designer来实现的,关于性能影响,带有GPU2D的MCU可以实现矢量图片和矢量字体的硬件加速,减少渲染时间,点击
参考链接
。
Q:如何减少图像的颜色以使用TouchGFX的图像压缩功能?
A:最简单的办法是使用Paint.NET。打开原始图像,使用“另存为”将图像保存为另一个文件。在“保存设置”对话框中,选择8位像素深度。点击
参考链接
。
Q:
TouchGFX 上下载的工程都支持哪些IDE?如何切换为其他IDE?
A:从TouchGFX上下载的工程一般STM32CubeIDE、KEIL、IAR都是支持,但默认IDE一般为STM32CubeIDE,如果要更改其他IDE,需要打开STM32CubeMX,更改Toolchain/IDE配置。
Q:TouchGFX支持触摸功能吗,如何实现触摸功能?
A:TouchGFX生成的文件中有STM32TouchController的源文件和头文件,里边预留了初始化和收集触摸地址的接口函数,在这两个接口函数中添加触摸初始化和传递采集的坐标位置即可。点击
参考链接
。
Q:STM32有哪些图形硬件加速器,TouchGFX如何使用这些硬件加速器?
A:
STM32用于图形加速和提升图形处理能力的外设单元有很多,如用于2D图形加速的处理单元DMA2D,用于视频编解码的JPEG,用于对类3D图形处理场景应用做加速的GPU2D。
同时STM32提供了灵活的总线矩阵,搭配用于图形高速扩展的XSPI/FMC/SDMMC,可以为图形处理提供高存储和高带宽支撑。同时CPU配合CACHE也可以大大提升图形处理的能力。
Q:TouchGFX是如何使用GPU2D实现图像的旋转缩放的?
A:目前STM32U5X9,STM32H7R/S系列包含Neochrom GPU,也称为GPU2D,GPU2D可以实现图片旋转、缩放、镜像、2D绘图的硬件加速。GPU2D的使用非常简单,只需要在STM32CubeMX里把GPU2D选中,TouchGFX会自动调用,用户只需配置TextureMapper控件的API函数即可,不用关心底层是如何实现的。
Q:TouchGFX UI部分代码是C++开发,C++不熟悉,用起来会不会很吃力?
A:完全不用担心,TouchGFX结合STM32CubeMX可以生成一站式代码,代码框架已经搭好,底层驱动用的是C语言,UI处理部分用的是C++,用户要做的是只添加逻辑应用代码,而且有例程可以参考,只需要了解下C++的最基本的概念就可以快速上手了。
Q:TouchGFX支持什么格式的视频,有什么视频硬件编解码器吗?
A:TouchGFX有video控件,支持mjpeg格式的视频(.avi),其他格式的视频可以通过转换工具进行转换,例如使用FFMPEG。带有JPEG的MCU可以实现视频的硬件解码,实现视频的流畅播放,没有JPEG外设的MCU可以使用软件解码。关于视频播放的实现,点击
参考链接
。
Q:TouchGFX支持多国语言吗?如何实现?
A:TouchGFX支持多国语言开发,可以通过TouchGFX Designer的Texts->Typographies->Language Settings部分就可以添加多国语言,然后在Texts->Texts中可以对文字进行翻译.通过TouchGFXDesgner也提供了一个translation导入导出工具:translations.rb,您可以将文本导出到excel,通过翻译工具翻译好后,再导回到TouchGFX中,这样可以方便快捷的实现多语言文本导入导出。
Q:TouchGFX有PC端的UI模拟器吗?如何修改生成的代码后,不影响仿真的运行呢?
A:TouchGFX Designer自带一个PC端的模拟器,设计好UI界面后,点击右下角的Run simulator就可以实现UI模拟。同时TouchGFX的UI设计使用的是MVP架构,可以实现代码和应用分离,因此在开发的适合建议在model层对数据处理使用宏定义SIMULATOR来做隔离,在simulator的时候使用一些模拟的数据,在非仿真的时候使用的是真实的数据,这样可以同时实现UI仿真和板卡运行的,提高开发速度。
Q:STM32 MCU在处理复杂图形(如3D图形、高清视频解码)时的性能如何?是否有推荐的硬件配置或优化策略?
A:STM32的NeoChrom(GPU2D)可以实现3D图像的硬件加速,JPEG可以实现视频的硬件解码,例如STM32H7RS系列MCU可以实现MPU级别的显示效果。
Q:如何评估不同型号STM32 MCU在图形处理方面的性能差异?
A:MCU的图形处理能力评估非常重要,您可以基于ST开发板运行您的UI界面来评估效果。此外对于LTDC接口,AN4861中table 10到table17针对LTDC接口列出了不同系列在不同色深,不同memory配置下所能支持的最大像素时钟,这个可以作为硬件平台能支持多大分辨率的参考。
Q:TouchGFX是C++的代码,如何处理与C的交互?
A:
TouchGFX采用的是Model-View-Presenter设计模式,UI显示部分主要使用简单的C++进行开发, 与后台通信部分可以通过Model层进行中转,Model层相当于一个数据库,可以通过Model层和硬件进行C语言的通信。
Model层也可以通过C++与UI部分进行通信,分层设计的思路使得系统架构更加清晰,具体内容
点击参考
。
Q:TouchGFX 在刷新SPI屏时是如何防止撕裂的?
A:首先建议选择一款带TE信号的屏幕或者模组, 然后通过软件可以控制使得MCU刷屏和LCD刷屏保持同步; 实现方式可以参考TouchGFX Designer中NUCLEO_C071RB+GFX01M2的TBS工程, 同时在UI设计时尽量使用部分刷新,缩短渲染时间,可以避免撕裂现象。
Q:在升级STM32 MCU或TouchGFX软件时,应注意哪些兼容性问题和迁移步骤?
Q:如何修改TouchGFX工程中的刷屏方向?
A:在TouchGFX Designer->Config-> Display可以配置横屏或竖屏显示方案,如果对于用户自己的DBI接口的屏幕,需要时可以通过发送更改屏幕方向寄存器命令来实现屏幕方向切换和匹配。
Q:在使用joystick的情况下,如何设计虚拟按键点按机制?
A:TouchGFX提供了Hardware key的的模拟按键机制,通过将物理按键映射到ASCII码,可以实现在PC端模拟时通过键盘按键模拟物理按键。可以参考NUCLEO_C071RB+GFX01M2的TBS工程以及RiceCookerDemo的例程,用户可以很方便的将物理按键和虚拟按键关联起来,仿真/板卡控制都很方便。
Q:如何保留screen上的内容不因为切屏而重置?
A:Screen显示的数据保存在model类中,model作为前后端通讯的接口,例如UI界面更改的数据需要传递到Model类中,这样当屏幕切换时,保存的数据还可以再传递回Screen。
Q:TouchGFX 目前是4.24.0,新的版本增加了什么新的功能?
A:增加了QRCode二维码控件,
点击参考
; 新增了RGB图片压缩功能,降低了系统对存储的需求。
Q:部分刷新功能在哪里设置?
Q:
TouchGFX
最低可用于stm32哪个型号的MCU?
A:STM32C0/G0/U0等系列都可以支持,具体可以参考TouchGFX Designer的板卡设置TBS参考,点击
参考文档
。
Q:STM32的MCU如何读取FLASH中的图像数据?外部flash有要求吗?
A:TouchGFX可以支持地址映射模式的FLASH图像数据访问,如QSPI/OSPI/HSPI/FMC等接口;同时也提供非地址映射的模式的FLASH,如SPI FLASH,点击
参考文档
。
Q:TouchGFX能支持水墨屏吗?
Q:TouchGFX 在为客户应用选择分辨率时,需要与客户沟通的哪些问题?
A:首先客户可以根据产品结构尺寸和可视区域选择期望的的分辨率和接口,分辨率/接口选择好后就可以选择合适的硬件MCU+MEM+LCD架构了,具体点击
参考文档
。
Q:交互代码,会在生成工程时履盖以前工程中的代码吗?如何处理?
A:TouchGFX Designer上设计的布局/文字/交互等代码都是放在generated目录中的文件的,用户添加的代码只需要添加到gui目录下即可,用户的代码可以继承Generated目录下的类,如果代码位置添加正确,用户代码不会被覆盖的。
Q:TouchGFX 帧缓冲区大小,如何在设计之初合理规划?RAM如何确定大小?
A:TouchGFX帧缓冲区的设置,每个帧缓冲区的大小,可以根据分辨率和色深进行计算,点击
参考介绍
。
Q:TouchGFX STM32H7S78-DK是什么接口的显示屏,支持哪些触控?
A:TouchGFX STM32H7S78-DK是RGB接口的显示屏,分辨率为800x480。支持电容触摸功能。
Q:TouchGFX是否提供了与RTOS集成的支持,以便更好地管理图形显示相关的任务和资源?
A:TouchGFX的生成器配合STM32CubeMX提供了OSWrapper功能,通过提供的接口API可以方便的集成不同的嵌入式操作系统(如FreeRTOS/ThreadX/...)或者NoOS的应用。
Q:STM32H7 支持3D图形吗?
A:我们最新发布的STM32H7R/S系列产品带有GPU2D图形加速单元,可以针对类3D GUI应用的渲染处理进行加速,带来很好的用户体验。
Q:WB系列能使用TouchGFX吗?
A:可以支持的,同时我们TouchGFX Designer也提供了NUCLEO-WB55RG+GFX01M2的板卡设置TBS供参考。
Q:
TouchGFX
,H7B0搭配1280X800分辨率屏幕,能否流程运行?
A:TouchGFX是可以支持1280x800的分辨率的,是否流畅/稳定的运行,可以参考AN4861中的H7B0的最大像素时钟,里面列出了根据不同色深对应的像素时钟,通过像素时钟结合LCD 规格书可以换算成支持的分辨率。
Q:TouchGFX 支持矢量字体,那么矢量字体相比传统的字库,他的优势是什么,在没有硬件加速的支持下,如何取舍?
A:
矢量字体是用曲线和线条来描述单个字母的字体。这些曲线和线条可以放大和缩小,以产生不同大小的字形。
矢量字体相对于传统的bitmap字体来主要有2个方面的差异:
1.空间占用: 如选用bitmap字体时,中文字库每个字体大小增加1份空间占用,如选用矢量字体后,当增加不同大小的字体排印时,FLASH占用只会略有增加。
2.渲染时间:使用矢量字体时渲染时间会略有增加。因此建议用户在设计时根据应用场景(空间优先或者渲染时间优先)进行选择。更多内容可点击参考我们TouchGFX Designer中的
FlashLimited例程
和
文档
(
点击左边蓝字进入
)。
请以上获奖的观众联系客服(微信号: STM32_01)领奖,
没有获奖的小伙伴也不要灰心!更多精彩活动请关注STM32微信公众号
。