STMCU小助手
发布时间:2022-2-18 22:56
|
前言 伴随着 GUI 应用在嵌入式领域比重日益增加,STM32 专门提供了 DMA2D、LTDC 以及 DSI 等外设,能够实现优良的 GUI 解决方案。本文主要围绕 STM32 的 DMA2D 和 LTDC 展开讨论,介绍图片 ALPHA 通道的处理事项。 ALPHA 通道简述; A$ O+ c! D1 s3 T9 d+ @! h6 n6 O ALPHA 通道是指一张图片的透明和半透明度。不同颜色格式的图片,具备的 ALPHA 通道位数有所区别,本文围绕 8 位的 ALPHA 通道展开介绍。如下图,为 ALPHA 通道的几种实例。其中透明度由ALPHA 通道值决定。( \& S. |6 ~, w6 i. `& x9 H% C
$ }/ u: [9 ?: U4 {" `5 Q% a STM32 图片显示方案介绍 为了更好的阐述 ALPHA 通道的作用及相关处理,先对 STM32 的图片显示进行简单介绍。以支持 DMA2D 和 LTDC 的 STM32 为例,图片的数据流如下图所示(为简化介绍,仅以图片生成像素数据,直接对像素数据进行显示的图片显示方案为例)。( `1 h9 B6 ~" G5 G1 e . ~( T' Q, Z! [
首先利用 PC 端工具,将图片转为包含像素数据的文件(例如 STemWin 中提供的 bmpCvt.exe 或者bmpCvtST.exe 工具,能够将图片导出为包含像素数据的.c 文件)。编译链接生成烧录文件,烧录时,对应的像素数据保存到 ROM 中。然后利用 DMA2D 实现图片资源的转移,转移到在 RAM 中开辟的显示缓存空间中。最后,LTDC 访问对应的显示缓存空间,实现对 RGB 接口显示屏的内容刷新,从而实现图片的显示。+ R* ]$ d6 Q' V# _ STM32 ALPHA 通道处理$ U$ e- a7 }/ i0 f, s4 m 上述例中,涉及到两种 STM32 内部外设 DMA2D 和 LTDC,内部框架如下图所示。 # v* k% V7 s0 }( C" E
; [6 n: T% j' F% P3 x4 F+ y 从图中可以了解到,ALPHA 通道在 DMA2D 和 LTDC 中都能进行处理。具体在像素格式转化和混合中处理。 下面围绕 ALPHA 通道处理,分环节进行描述。 ) N0 R. N0 _0 z% I 7 w* V6 B3 v# q0 J PC 端处理# o7 a" R3 G2 O. @, y( X ALPHA 通道在电脑端的处理,除了应用效果上的处理外,主要注意图片导出像素信息时,与硬件平台匹配。, D) K# L9 @" C# J 例如,bmpCvtST.exe 工具为 32 位真彩色图片,提供了如下两种导出类型。bmpCvtST.exe 是bmpCvt.exe 的 ST 版,能够更好的支持 STM32 平台上图片应用开发。 1 y) K+ n/ u; a" o$ u9 D( d
/ _$ W1 c( c1 F5 N6 z . s4 X M# X% i5 ?8 Z a 具体导出何种类型的图片数据.c 文件,需要根据采用的 STM32 DMA2D 外设支持情况进行确定。将在DMA2D 处理小结进行说明。一般情况下,ARGB 格式与全部支持 DMA2D 和 LTDC 的 STM32 硬件平台匹配。; k: E3 \: }: }% I- ~ 4 }0 |4 v( s$ H% L3 E DMA2D 上处理 如上图,在利用 DMA2D 进行数据的转移、填充等过程中,支持对 ALPHA 通道值的更改。在像素格式转换环节,通过 DMA2D_xxPFCCR 寄存器的配置实现,支持如下三种形式: 1. 保留像素信息原 ALPHA 通道值 2. 利用 ALPHA@DMA2D_xxPFCCR 替换原 ALPHA 通道值6 K6 D* s+ l: j$ i Y. g 3. 利用原 ALPHA 通道值* ALPHA@DMA2D_xxPFCCR / 255 替换原 ALPHA 通道值另外,某些 STM32 的 DMA2D 提供了 ALPHA 通道值取反、RED 通道与 BLUE 通道互换的功能,具体请根据对应 STM32 的参考手册了解是否支持。具有这种功能的 STM32 能够匹配上面描述的 ABGR 类型。! w/ [; _! v) X4 F4 I/ F 在混合环节,虽然涉及到 ALPHA 通道,但表现为遵循固定的混合公式进行通道混合。在这里不做讨论, 详情请参考对应参考手册的 DMA2D blender 章节。 7 j+ v& Q u5 Z( C LTDC 上处理 像素格式转化环节,并不涉及可配置的 ALPHA 通道处理,这里不做讨论。在混合环节,能够根据不同的混合因子,对各层混合时 ALPHA 通道进行不同的处理, 实现不同的效果。各层混合流程如下图,采用自下而上的混合方式。 9 p# v, ?$ [; q# T2 w% _7 Y$ _0 a" b
& t/ z6 z3 \/ [: k; @ 层间混合遵循如下公式: BC = BF1 x C + BF2 x Cs 其中: BC = 混合颜色+ w- v& P7 X8 n& {! \- r BF1 = 混合因子 1, a2 L C5 r1 Y. P1 x& K6 h C = 当前层颜色2 K. O% @4 F# h0 b BF2 = 混合因子 2 Cs = 下层混合颜色 涉及到的参数,可以进行如下可选的配置,从而执行不同的层级颜色混合。其中 BF1、BF2 因子决定了对应 ALPHA 通道处理。 4 @, h- k) o3 Y; j, a/ P5 q/ s/ |0 C, N
0 s5 ?5 V5 g4 c: r: A 例如:当配置层 2 参数 BF1 = 0b100, BF2= 0b100,CONSTA=0xFF 时,BC = C。显示效果为不论图片中 ALPHA 通道值,只显示对应区域上层 2 的图片,其它层颜色不显示。 * C/ v) q8 _4 E1 R" @ a7 G* Z0 n" V 总结0 o4 \7 a" \- |$ o$ v# j 图片的转化显示虽然简单,但由于涉及到不同平台,需要注意匹配性问题。实际实现过程中,需要对各环节有一定程度的了解,从而实现同样的显示效果。需知,上述的 STM32 GUI 方案描述,是针对支持 DMA2D 和 LTDC 的 STM32。同时,为了聚焦于 ALPHA 通道的介绍,仅以图片生成的.c 文件为例,介绍图片显示方案。除此之外,STM32 还提供了其他丰富的 GUI 方案,能够直接支持各种格式的图片,例如.bmp, .png,.jpg 等。4 v3 c' a0 i' p# }1 q ( N' D& A; `) R& ^2 s |
【经验分享】STM32语音识别的智能蓝牙音箱(源程序+原理图+PCB+设计说明书+PPT)
想找个ST芯片
[GPIO] 使用新型抽象开始C++嵌入式编程,从GPIO开始
技术手册stm32f1xx中的一个小问题
【经验分享】STM32 HAL库移植FreeModbus详细步骤
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
微信公众号
手机版