
前言 伴随着 GUI 应用在嵌入式领域比重日益增加,STM32 专门提供了 DMA2D、LTDC 以及 DSI 等外设,能够实现优良的 GUI 解决方案。本文主要围绕 STM32 的 DMA2D 和 LTDC 展开讨论,介绍图片 ALPHA 通道的处理事项。$ E; I$ |6 U2 m' O9 f3 V; F0 t ALPHA 通道简述 ALPHA 通道是指一张图片的透明和半透明度。不同颜色格式的图片,具备的 ALPHA 通道位数有所区别,本文围绕 8 位的 ALPHA 通道展开介绍。如下图,为 ALPHA 通道的几种实例。其中透明度由ALPHA 通道值决定。 2 x* I: c) X; m3 Q ![]() 0 w, v- }+ p5 j+ c6 K J STM32 图片显示方案介绍 为了更好的阐述 ALPHA 通道的作用及相关处理,先对 STM32 的图片显示进行简单介绍。以支持 DMA2D 和 LTDC 的 STM32 为例,图片的数据流如下图所示(为简化介绍,仅以图片生成像素数据,直接对像素数据进行显示的图片显示方案为例)。& L7 I7 m/ @3 A/ d: b ![]() 首先利用 PC 端工具,将图片转为包含像素数据的文件(例如 STemWin 中提供的 bmpCvt.exe 或者bmpCvtST.exe 工具,能够将图片导出为包含像素数据的.c 文件)。编译链接生成烧录文件,烧录时,对应的像素数据保存到 ROM 中。然后利用 DMA2D 实现图片资源的转移,转移到在 RAM 中开辟的显示缓存空间中。最后,LTDC 访问对应的显示缓存空间,实现对 RGB 接口显示屏的内容刷新,从而实现图片的显示。 9 k& _2 S; a2 |( E- m1 O1 @ STM32 ALPHA 通道处理. V7 `/ E' G6 _% N1 @ 上述例中,涉及到两种 STM32 内部外设 DMA2D 和 LTDC,内部框架如下图所示。 C" k5 O* Z# Z$ h w9 P. V+ o + u$ p+ x, Z+ s9 w ![]() 7 w' Y& t6 ]$ _/ @' I 从图中可以了解到,ALPHA 通道在 DMA2D 和 LTDC 中都能进行处理。具体在像素格式转化和混合中处理。& d% L% ~% V# w 下面围绕 ALPHA 通道处理,分环节进行描述。8 c1 F3 ^/ u" a6 E7 L$ P0 _ PC 端处理7 j6 B& m( l4 N/ q* p1 @ ALPHA 通道在电脑端的处理,除了应用效果上的处理外,主要注意图片导出像素信息时,与硬件平台匹配。 例如,bmpCvtST.exe 工具为 32 位真彩色图片,提供了如下两种导出类型。bmpCvtST.exe 是bmpCvt.exe 的 ST 版,能够更好的支持 STM32 平台上图片应用开发。$ [3 a1 \) f, v( o8 Y3 p 6 M+ h" o# Z2 p% n9 z Y% x$ ? ![]() / [; T6 p$ T; p# [( X+ `; N& C 4 J1 |$ u4 [! @% \# b8 ~; B1 n 具体导出何种类型的图片数据.c 文件,需要根据采用的 STM32 DMA2D 外设支持情况进行确定。将在DMA2D 处理小结进行说明。一般情况下,ARGB 格式与全部支持 DMA2D 和 LTDC 的 STM32 硬件平台匹配。$ ^' s9 V6 C) G/ K2 N! p ) |% m% G0 ~/ D0 Y3 N& J6 I DMA2D 上处理$ H/ j% U2 \1 e: p+ X6 j6 @ 如上图,在利用 DMA2D 进行数据的转移、填充等过程中,支持对 ALPHA 通道值的更改。在像素格式转换环节,通过 DMA2D_xxPFCCR 寄存器的配置实现,支持如下三种形式: 1. 保留像素信息原 ALPHA 通道值+ t/ Y3 s) n% n1 d" U; R 2. 利用 ALPHA@DMA2D_xxPFCCR 替换原 ALPHA 通道值4 Y# d& U& I' E' M' c 3. 利用原 ALPHA 通道值* ALPHA@DMA2D_xxPFCCR / 255 替换原 ALPHA 通道值另外,某些 STM32 的 DMA2D 提供了 ALPHA 通道值取反、RED 通道与 BLUE 通道互换的功能,具体请根据对应 STM32 的参考手册了解是否支持。具有这种功能的 STM32 能够匹配上面描述的 ABGR 类型。 在混合环节,虽然涉及到 ALPHA 通道,但表现为遵循固定的混合公式进行通道混合。在这里不做讨论, 详情请参考对应参考手册的 DMA2D blender 章节。 / t7 |% r M' X6 x5 T LTDC 上处理8 Z- p6 b8 l; R 像素格式转化环节,并不涉及可配置的 ALPHA 通道处理,这里不做讨论。在混合环节,能够根据不同的混合因子,对各层混合时 ALPHA 通道进行不同的处理, 实现不同的效果。各层混合流程如下图,采用自下而上的混合方式。 ![]() 层间混合遵循如下公式: BC = BF1 x C + BF2 x Cs% S) O$ d K# n) k5 K- N, H, r 其中: BC = 混合颜色 BF1 = 混合因子 1 C = 当前层颜色 BF2 = 混合因子 2 Cs = 下层混合颜色 涉及到的参数,可以进行如下可选的配置,从而执行不同的层级颜色混合。其中 BF1、BF2 因子决定了对应 ALPHA 通道处理。 , N& t) g/ M6 a+ A2 Y. l, w9 T0 x ![]() ( n2 p" b8 ^% M- ` 例如:当配置层 2 参数 BF1 = 0b100, BF2= 0b100,CONSTA=0xFF 时,BC = C。显示效果为不论图片中 ALPHA 通道值,只显示对应区域上层 2 的图片,其它层颜色不显示。 总结$ Z% ~& M3 t7 S/ Q 图片的转化显示虽然简单,但由于涉及到不同平台,需要注意匹配性问题。实际实现过程中,需要对各环节有一定程度的了解,从而实现同样的显示效果。需知,上述的 STM32 GUI 方案描述,是针对支持 DMA2D 和 LTDC 的 STM32。同时,为了聚焦于 ALPHA 通道的介绍,仅以图片生成的.c 文件为例,介绍图片显示方案。除此之外,STM32 还提供了其他丰富的 GUI 方案,能够直接支持各种格式的图片,例如.bmp, .png,.jpg 等。# D% }+ F) a) R$ F5 p! D8 B 2 e) c2 Z% J' G) x9 v |
【2025·STM32峰会】GUI解决方案实训分享5-调通板载的NRF24L01 SPI接口并使用模块进行无线通信(发送和接收)
【2025·STM32峰会】GUI解决方案实训分享2-编译运行TouchGFX咖啡机例程(含桌面仿真)
实战经验 | Keil工程使用NEAI库的异常问题
STM32 ISP IQTune:真正零门槛的免费ISP调整软件
【经验分享】STM32 新建基于STM32F40x 固件库的MDK5 工程
意法半导体MCU双供应链策略,打消中国客户后顾之忧
【经验分享】基于STM32使用HAL库实现USB组合设备CDC+MSC
2024意法半导体工业峰会:赋能智能电源和智能工业,构筑可持续未来
ST推出灵活、面向未来的智能电表通信解决方案,助力能源转型
意法半导体 x Qu-Bit Electronix:推动新一轮的数字声音合成革命