STMCU小助手
发布时间:2023-6-19 14:07
|
前言 越来越多的智能设备会基于 STM32 实现图形界面,而 TouchGFX 是专门用于 STM32 的图形界面设计软件,使图形界面能达到类似智能手机的显示效果。通常,在支持 FMC、LTDC、MIPI-DSI 等 LCD 接口的 STM32,都有着比较丰富的内存资源,SRAM 存放帧缓冲也毫无压力。但在一些成本敏感的产品上,STM32 内存较小,不足以存放完整的帧缓冲,这类产品又如何使用 TouchGFX 来做图形界面应用呢?本文将介绍 TouchGFX 的部分帧缓冲特性,以及基于STM32G0 系列 的移植过程。 部分帧缓冲 ( 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 Partial Framebuffer,部分帧缓冲 3 _0 p" }. W' K9 d; e G 对内置了 GRAM 的 LCD 来说,图形显示的过程可以概括如下图: ) a9 q* T# h5 a, m
+ 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 内容显示到屏幕 如果使用完整的 framebuffer,在上面第 2 步进行传输时,每次传输的都是一整屏的数据。而在很多场景中,LCD 屏幕上变化的区域并不大。比如一个控制界面,可能只有一个小图标会有变化,其它区域都保持不变。我们可以只更新屏幕变化的区域。$ }0 P+ h5 `# u% f4 X$ W! c 部分帧缓冲与此类似,framebuffer 可以被分成许多个小的缓存块去更新和传输,而这些小块的缓存可以被重用,这样可以极大的减小图形应用对内存的需求。而使用 partial framebuffer 的方式,仅有稍许限制: 1, LCD 模块必需要内置 GRAM 2, 在复杂界面时可能会有撕裂效果. q2 J& }. N5 \# [! _3 U9 u& @ 部分帧缓冲在 STM32G071 上的应用 目标板上的 STM32G071 内置 128K flash,36K SRAM,外接 SPI 接口的 LCD,分辨率 240x320 像素,16 位色。按此 LCD 的分辨率,要支持 TouchGFX 图形应用,必须使用部分帧缓冲特性。+ f' M8 ~* z Z% G9 U 配置过程 整个配置过程主要包括以下四个方面:* Q0 S- H- A: P5 J8 z 一、在 CubeMX 中,配置 TouchGFX generator 的 display 属性如下图:
+ 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 ?
0 s% d( \% A$ H# N/ ~ 二、配置完成后,先由 CubeMX 生成代码。可以看到,会生成 TouchGFX 目录,以及该目录下的配置文件与部分源码文件。7 |4 O: s( b7 J9 k3 t/ W
三、打开 ApplicationTemplate.touchgfx.part 文件,即可打开 TouchGFX Designer 工具,如下图。比如,可以添加box 控件作为背景,textArea 控件来显示文本。
然后通过 Generate Code 生成 UI 相关的代码,主要包含 generated 和 gui 两个目录。generated 目录包含生成的资源文件,如字体信息、文本信息、图片资源等,还包括各个 screen 的基类代码。而 gui 目录则包含 screen 的派生类代码。用户可基于 gui 目录进行 UI 后续的开发。8 K# @# }6 @( N8 B " f, ?7 K8 m2 `' p/ s! ~
完整版请查看:附件
基于低成本STM32的图形应用v1.pdf
(540.18 KB, 下载次数: 6)
|
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
Keil-MDK 在线调试设置断点的高级用法
请教下STM32N6570 怎么把分辨率改成320x240并可以全屏显示
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
使用STM32 MCU和MPU连接PDM数字麦克风
分享STM32资料-采用 STM32U031R8 MCU 的 STM32 Nucleo-64 开发板,官方资料,数据手册等资料
HRTIM 指南
使用 STM32 的 DWT 单元监控内存
DAC,COMP,HRTIM Fault 功能的使用
微信公众号
手机版