你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于低成本 STM32 的图形应用

[复制链接]
STMCU小助手 发布时间:2023-6-19 14:07
前言
, |3 a/ ~) L( `/ ^& |( V3 W6 u1 G7 \越来越多的智能设备会基于 STM32 实现图形界面,而 TouchGFX 是专门用于 STM32 的图形界面设计软件,使图形界面能达到类似智能手机的显示效果。通常,在支持 FMC、LTDC、MIPI-DSI 等 LCD 接口的 STM32,都有着比较丰富的内存资源,SRAM 存放帧缓冲也毫无压力。但在一些成本敏感的产品上,STM32 内存较小,不足以存放完整的帧缓冲,这类产品又如何使用 TouchGFX 来做图形界面应用呢?本文将介绍 TouchGFX 的部分帧缓冲特性,以及基于STM32G0 系列 的移植过程。
( R, h' y* ^  n: G% t5 r
部分帧缓冲 ( f" m# w2 j9 @; M. X5 x. m; A0 B
通常在做图形应用时,需要在 MCU 的 SRAM 里申请一块内存作为帧缓冲:framebuffer。比如使用一个分辨率为240x320,16 位色深的 LCD,需要申请的内存大小为:240x320x2 = 153600 Bytes。而很多低成本的 MCU 内存较小,根本无法满足图形应用对内存的需求。不过,TouchGFX 现在支持部分帧缓冲,仅使用较小的内存作为帧缓冲即可支持图形应用。: f1 f9 C7 F4 J6 m9 e7 G% N

. m7 \+ c. G5 ?7 Z* V
Partial Framebuffer,部分帧缓冲 3 _0 p" }. W' K9 d; e  G
对内置了 GRAM 的 LCD 来说,图形显示的过程可以概括如下图:
3 q/ }: o% r/ S% }+ b( y- S
3 Y5 n( k7 a7 W. y) d! U: ?
) a9 q* T# h5 a, m
V7O8[W}A{S)]Z)6@RGOWN@O.png 2 V& s: t" U* y4 }; ]- [/ b5 x: w4 J# z
+ c) b# l9 t) `5 C6 M2 N7 F
1, MCU 将图形界面画到内部 Framebuffer& T- z6 h' h$ V6 E( N( @
2, 画图过程结束后,将 Framebuffer 内容传输到 LCD GRAM& n/ k7 ~; W( }8 e+ p' d
3, 由 LCD controller 将 GRAM 内容显示到屏幕
5 x6 |( h7 M" w. x$ J
6 E, a6 `6 d) H5 [# m  l
如果使用完整的 framebuffer,在上面第 2 步进行传输时,每次传输的都是一整屏的数据。而在很多场景中,LCD 屏幕上变化的区域并不大。比如一个控制界面,可能只有一个小图标会有变化,其它区域都保持不变。我们可以只更新屏幕变化的区域。$ }0 P+ h5 `# u% f4 X$ W! c
部分帧缓冲与此类似,framebuffer 可以被分成许多个小的缓存块去更新和传输,而这些小块的缓存可以被重用,这样可以极大的减小图形应用对内存的需求。而使用 partial framebuffer 的方式,仅有稍许限制:
4 G% U. l# @3 _  u1, LCD 模块必需要内置 GRAM
" f& G/ N0 Z8 o  u4 h: q* a6 E; K1 h2, 在复杂界面时可能会有撕裂效果. q2 J& }. N5 \# [! _3 U9 u& @

0 o0 v' p! {9 `2 b/ E部分帧缓冲在 STM32G071 上的应用
9 V6 L2 }( _% u/ y) O; J9 l目标板上的 STM32G071 内置 128K flash,36K SRAM,外接 SPI 接口的 LCD,分辨率 240x320 像素,16 位色。按此 LCD 的分辨率,要支持 TouchGFX 图形应用,必须使用部分帧缓冲特性。+ f' M8 ~* z  Z% G9 U

8 h: z; y/ \% Y! R6 B6 y
配置过程
* e3 r8 ], x% s+ R8 h整个配置过程主要包括以下四个方面:* Q0 S- H- A: P5 J8 z
一、在 CubeMX 中,配置 TouchGFX generator 的 display 属性如下图:
8 |) P4 R: F$ m) k0 t8 ^ 9U48ZJRGV[})~8Q`{OQ`]T6.png
$ S1 q9 p7 ~. V9 |; I% o6 |" ?$ M
+ s) E% j8 o& E3 G8 R- b" t
缓冲块个数和缓冲块大小都可以根据需要调整1 e1 o# S( G0 U' N& c$ q# K% J
: z7 l" z; [& u: w' M: r7 h
6 x8 u7 R6 [  g: x: l- g5 ^6 ?
NL]D)L~F}{20Q92U94Z6N75.png - S4 @# T! |* B3 I: u2 N- G
0 s% d( \% A$ H# N/ ~
二、配置完成后,先由 CubeMX 生成代码。可以看到,会生成 TouchGFX 目录,以及该目录下的配置文件与部分源码文件。7 |4 O: s( b7 J9 k3 t/ W

1 _' g0 ?( M  T8 q) E: N %BMHLSDS5WF{)UK~8HRI2HG.png ) ^2 C# [: J: b
三、打开 ApplicationTemplate.touchgfx.part 文件,即可打开 TouchGFX Designer 工具,如下图。比如,可以添加box 控件作为背景,textArea 控件来显示文本。
. Y! e2 S7 {5 Q2 v' _
$ N5 u/ E0 ~3 Z. b }U]B28(CY}(B5X4RSSR(P93.png
8 \  g, x4 U8 Q' n然后通过 Generate Code 生成 UI 相关的代码,主要包含 generated 和 gui 两个目录。generated 目录包含生成的资源文件,如字体信息、文本信息、图片资源等,还包括各个 screen 的基类代码。而 gui 目录则包含 screen 的派生类代码。用户可基于 gui 目录进行 UI 后续的开发。8 K# @# }6 @( N8 B

/ W5 q' f& L! i" f, ?7 K8 m2 `' p/ s! ~
@J}]NR~L`KZ)`VIZ584VG(7.png + z3 r0 _( N3 \: W' Z9 a

' O; e# H* N2 p完整版请查看:附件 基于低成本STM32的图形应用v1.pdf (540.18 KB, 下载次数: 6)
赞 收藏 评论0 发布时间:2023-6-19 14:07

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版