一)STM32硬件
1)主要划分为4个主要部分:
• MCU/FLASH/RAM/Display
2)STM32 GUI 嵌入式图形
二)STM32软件
特性介绍
三)概览
-----TouchGFX Designer
-----TouchGFX 基本概念
-----TouchGFX 基础控件,交互设计与仿真
3.1 TouchGFX Designer
1)界面1
2)界面2
3)界面3
4)创建工程
• 选择STM32H750B-DK硬件模板
• 选择空的UI模板
5) 添加图片
• 将图片拷贝到目录
• TouchGFX\assets\images
• TouchGFX Designer 界面添加
6)添加字体
• 将字体文件拷贝到目录
• TouchGFX\assets\fonts
• 重启TouchGFX Designer 生效
7)字体管理
• Group
• 添加文本
• 修改属性
• 添加多语言
8)工程配置
3.2.TouchGFX基本概念
3.2.1颜色
1)颜色格式
2)颜色深度
• 用于描述存储在帧缓冲区中的每种颜色的位数。
• 每像素位数表示这个数字,或者简称bpp。
• 使用的位越多,我们可以描述的颜色就越多。
TouchGFX 内置支持以下颜色深度:
• 32 bpp - 16777216 种颜色和相应的不透明度值
• 24 bpp - 16777216 色
• 16 bpp - 65536 色
• 6 bpp - 64 色
• 4 bpp - 16 灰度颜色
• 2 bpp - 4 种灰度颜色
• 1 bpp - 2 种灰度颜色
3)颜色格式
4)图片格式
5)文本格式
• 文本或更准确的字形也以特定颜色格式存储在内存中。
• TouchGFX 中可用的文本颜色格式是:
—字形格式类似于小图像,其中每个颜色条目都包含每个像素的不透明度级别。
----这使得能够在应用实际颜色、红色、绿色和蓝色分量,并且能够以蓝色版本和红色版本绘制例如存储的字形“A”。
—每个字形使用的位越多,它通常会显得越平滑、越好.
3.2.2帧缓冲区
1)帧缓冲区概念
• 图形引擎更新的一块内存,其中包含要在Display上显示的下一个图像。
• 每个条目都是关联颜色格式的颜色(像素)。
2)帧缓冲策略: 可以支持多种帧缓冲区策略
• 多于1个(常用2个)
• 1个
• 少于1个(部分缓冲)
3)策略影响性能
• 多于1个会带来更好的性能,成本会增加
• 小于1个(部分缓冲)
• 允许在低RAM平台上运行
4)计算帧缓冲的开销
3.2.3图形引擎
1) 主要功能:TouchGFX 图形引擎的主要职责是在嵌入式设备的Display上绘制图形。
2) 场景模式:
• 立即模式图形引擎提供了一个API,使应用程序能够直接将事物绘制到Display上.
—应用程序有责任确保在正确的时间调用正确的绘图操作。
• 保留模式图形引擎允许用户操作正在显示的组件的抽象模型.
—引擎负责在正确的时间将此组件模型转换为正确的图形绘制操作。
3) TouchGFX 遵循保留模式图形原则:
优点:
• 易于使用:保留的图形引擎易于使用。用户通过调用内部模型上的方法来处理屏幕上组件的配置,而不考虑实际的绘图操作。
• 性能: TouchGFX 分析场景模型并优化在屏幕上实现模型所需的绘图调用。这包括故意不绘制隐藏组件、仅绘制和传输组件的更改部分、管理帧缓冲区等等。
• 状态管理: TouchGFX 跟踪场景模型的哪个部分处于活动状态。 这反过来又使用户更容易优化场景模型内容。
缺点:
• 内存消耗:表示场景模型占用一些内存。
• TouchGFX通过分析场景模型并优化相应的渲染,可以达到高性能水平,通常每秒渲染60 帧。
• 在减少TouchGFX 的场景模型使用的内存量方面付出了巨大的努力。
• 在有的典型的应用程序中,此模型的内存量远低于1 Kbytes。
3.2.4 控件与容器
1)控件: TouchGFX中,控件是对可显示,可交互的事物的抽象定义。
2)容器:TouchGFX中,容器是一种组件,它能容纳子节点,比如控件或其它容器,容器可充当视窗,即子节点在此容器可视区域内的部分才能显示
3)Z-order:子节点的z-order值,取决于子节点加入容器的先后顺序。最后加入的子节点zorder值最大,即会显示在容器的最上层。每个界面中Screen是根容器,所有控件都被添加到根容器。
3.3 TouchGFX基础控件,交互设计与仿真
3.3.1 调试方法
- DebugPrinter
• 输出调试信息到显示器
gui/src/common/FrontendApplication.cpp
- Simulator Only Code
• touchgfx_printf
#include <touchgfx/Utils.hpp>
#ifdef SIMULATORtouchgfx_printf("console button click: %d", count);
#endif
模拟器运行的UI与板上UI一致,模拟器功能:
3.3.2 基础控件介绍
6组基础控件和 1组自定义控件
• Buttons
• Images
• Containers
• Shapes
• Progress indicators
• Misc
1) Buttons
- Button 能响应触控事件: Button 在release(释放)时,通过回调实现对触控事件的响应
- Buttons的属性:
- Button的 交互
• Trigger: button clicked(点击按钮)
• Action: Call new virtual function(调用新的虚函数)
- 交互的动作响应
• Button callback回调
• Action
Screen1ViewBase.hpp 基类响应函数
Screen1View.cpp 子类响应函数
3.3.2.1 Interactions(相互作用)
• 交互:一个交互是一种配置,包括一个触发事件和一个动作响应,当触发事件发生时,去执行配置的动作响应。
–触发事件:交互的开始
–动作响应:触发事件发生后去执行的响应
1) Trigger(触发), 一个空的Screen包含三个触发事件:
• Hardware button is clicked
• Screen transition begins
• Screen transition ends
Screen添加控件时,会同时添加与此控件关联的触发事件,例如, 添加一个Button控件时,会添加一个触发事件:Button is clicked。
2)• Actions(动作), 一个空的Screen包含五个动作响应:
• Call new virtual function
• Change screen
• Execute C++ code
• Set Language
• Wait for
Screen添加控件时,会同时添加与此控件关联的动作响应, 添加一个Button控件时会添加以下动作响应:
• Move widget
• Fade widget
• Hide widget
• Show widget
3)链式交互, 一个交互的响应完成时,能触发另一个交互开始,产生链式交互:
3.3.2.2 Mixins(混入)
1)Draggable 拖放
• Draggable Mixins 可为控件增加可拖放的功能
• 使能Draggable Mixins 时,会改变控件的声明方式
Button控件使能 Mixins Draggable时
touchgfx::Button button1;
touchgfx::Draggable< touchgfx::Button > button1;
2)ClickListener(点击监听器)
• ClickListener Mixins 可为控件增加触控响应功能
• 使能ClickListener Mixins 时,会改变控件的声明方式
Button控件使能 Mixin ClickListener时
touchgfx::Box box3;
touchgfx::ClickListener< touchgfx::Box > box3;
3) FadeAnimator(淡入淡出动画制作工具)
• FadeAnimator Mixins 通过修改透明度alpha属性,为控件增加淡出效果
• 可通过EasingEquation来指定淡出的速率
• 在一个交互的动作响应中,如果让某个控件淡出,并且时间不为零,则此控件会自动使能FadeAnimator Mixins
• 使能FadeAnimator Mixins 时,会改变控件的声明方式
• 使能FadeAnimator Mixin 后, 控件可使用startFadeAnimation 函数实现淡出效果. 此函数有三个参数:
– endAlpha: 动画结束时控件的alpha值
–duration: 动画持续的时间,以tick为单位
–alphaProgressionEquation: 改变alpha值时使用的EasingEquation
Box控件使能FadeAnimator Mixin时
touchgfx::Box box3;
touchgfx::FadeAnimator< touchgfx::Box > box3;
4) MoveAnimator(移动动画)
• MoveAnimator Mixins 为控件添加动画能力,控件能从当前位置移动到指定的结束位置。
• 可用EasingEquations来指定在X轴与Y轴方向上的移动方式
• 如果在交互中设置动作响应是移动某个控件,则此控件自动使能MoveAnimator Mixins功能
• 使能MoveAnimator Mixins 时,会改变控件的声明方式
Box控件使能MoveAnimator Mixins时
touchgfx::Box box3;
touchgfx::MoveAnimator< touchgfx::Box > box3;
• 使能MoveAnimator Mixins后,控件可使用startMoveAnimation 函数实现移动动画效果。此函数有五个参数如下:
–endX: 移动控件时终点的X轴坐标
–endY: 移动控件时终点的Y轴坐标
–duration: 移动持续时间,以tick为单位
–xProgressionEquation: X轴EasingEquation
–yProgressionEquation: Y轴EasingEquation
2) Button With Label
- 属性:
3) Button With Icon