
前言 伴随着 GUI 应用在嵌入式领域比重日益增加,STM32 专门提供了 DMA2D、LTDC 以及 DSI 等外设,能够实现优良的 GUI 解决方案。本文主要围绕 STM32 的 DMA2D 和 LTDC 展开讨论,介绍图片 ALPHA 通道的处理事项。 ALPHA 通道简述 ALPHA 通道是指一张图片的透明和半透明度。不同颜色格式的图片,具备的 ALPHA 通道位数有所区别,本文围绕 8 位的 ALPHA 通道展开介绍。如下图,为 ALPHA 通道的几种实例。其中透明度由ALPHA 通道值决定。" c3 e5 ^) a# g! U! |* a / p# ~ b2 S9 H! v' B* L3 N5 f1 ^ ![]() STM32 图片显示方案介绍 为了更好的阐述 ALPHA 通道的作用及相关处理,先对 STM32 的图片显示进行简单介绍。以支持 DMA2D 和 LTDC 的 STM32 为例,图片的数据流如下图所示(为简化介绍,仅以图片生成像素数据,直接对像素数据进行显示的图片显示方案为例)。 ![]() 首先利用 PC 端工具,将图片转为包含像素数据的文件(例如 STemWin 中提供的 bmpCvt.exe 或者bmpCvtST.exe 工具,能够将图片导出为包含像素数据的.c 文件)。编译链接生成烧录文件,烧录时,对应的像素数据保存到 ROM 中。然后利用 DMA2D 实现图片资源的转移,转移到在 RAM 中开辟的显示缓存空间中。最后,LTDC 访问对应的显示缓存空间,实现对 RGB 接口显示屏的内容刷新,从而实现图片的显示。 ; n2 D* m X0 I* a5 b7 d6 ?& u STM32 ALPHA 通道处理 上述例中,涉及到两种 STM32 内部外设 DMA2D 和 LTDC,内部框架如下图所示。, P. S$ h. k2 G5 ~ ![]() " O1 g+ \& v0 w, Z- N* R/ o, W- s 从图中可以了解到,ALPHA 通道在 DMA2D 和 LTDC 中都能进行处理。具体在像素格式转化和混合中处理。 下面围绕 ALPHA 通道处理,分环节进行描述。1 Y5 N$ C, x7 C" T4 {2 Z! l, I ! q% a3 }* j7 o7 k. o ' h& y+ v# ^2 Z) D# S! j- ^6 V PC 端处理 ALPHA 通道在电脑端的处理,除了应用效果上的处理外,主要注意图片导出像素信息时,与硬件平台匹配。2 T. j; D9 _. L$ }2 n: _. s 例如,bmpCvtST.exe 工具为 32 位真彩色图片,提供了如下两种导出类型。bmpCvtST.exe 是bmpCvt.exe 的 ST 版,能够更好的支持 STM32 平台上图片应用开发。) c8 w. _- B7 [! S- K6 [- [ ![]() # S7 l# M) Q$ }" N# `9 f2 _ 具体导出何种类型的图片数据.c 文件,需要根据采用的 STM32 DMA2D 外设支持情况进行确定。将在DMA2D 处理小结进行说明。一般情况下,ARGB 格式与全部支持 DMA2D 和 LTDC 的 STM32 硬件平台匹配。 * o3 _" g0 |* I( O% i DMA2D 上处理 如上图,在利用 DMA2D 进行数据的转移、填充等过程中,支持对 ALPHA 通道值的更改。在像素格式转换环节,通过 DMA2D_xxPFCCR 寄存器的配置实现,支持如下三种形式: 1. 保留像素信息原 ALPHA 通道值! {1 s& E' z# v3 \" X8 h+ z 2. 利用 ALPHA@DMA2D_xxPFCCR 替换原 ALPHA 通道值6 d, k' e' z& Q' N' k# h 3. 利用原 ALPHA 通道值* ALPHA@DMA2D_xxPFCCR / 255 替换原 ALPHA 通道值另外,某些 STM32 的 DMA2D 提供了 ALPHA 通道值取反、RED 通道与 BLUE 通道互换的功能,具体请根据对应 STM32 的参考手册了解是否支持。具有这种功能的 STM32 能够匹配上面描述的 ABGR 类型。6 c- ]' J" u; e- \. P* B/ T8 t 在混合环节,虽然涉及到 ALPHA 通道,但表现为遵循固定的混合公式进行通道混合。在这里不做讨论, 详情请参考对应参考手册的 DMA2D blender 章节。 LTDC 上处理0 F! N; B3 b4 |9 H3 h9 o) J4 A& W 像素格式转化环节,并不涉及可配置的 ALPHA 通道处理,这里不做讨论。在混合环节,能够根据不同的混合因子,对各层混合时 ALPHA 通道进行不同的处理, 实现不同的效果。各层混合流程如下图,采用自下而上的混合方式。2 @ ` a2 @- r+ O % e0 c6 ]/ C# U& y1 [9 n4 c ![]() 层间混合遵循如下公式: BC = BF1 x C + BF2 x Cs 其中: BC = 混合颜色 K" J% E" V, ?, b4 U4 r( S BF1 = 混合因子 1# ^5 D7 Y# K( m; A C = 当前层颜色 BF2 = 混合因子 2& Z0 `; ?% h; N3 X' T( H5 { Cs = 下层混合颜色# O& S6 O% ~, z, n" `! T% | 涉及到的参数,可以进行如下可选的配置,从而执行不同的层级颜色混合。其中 BF1、BF2 因子决定了对应 ALPHA 通道处理。 : ]6 h" o- S) u& Z" B ![]() 例如:当配置层 2 参数 BF1 = 0b100, BF2= 0b100,CONSTA=0xFF 时,BC = C。显示效果为不论图片中 ALPHA 通道值,只显示对应区域上层 2 的图片,其它层颜色不显示。 总结 图片的转化显示虽然简单,但由于涉及到不同平台,需要注意匹配性问题。实际实现过程中,需要对各环节有一定程度的了解,从而实现同样的显示效果。需知,上述的 STM32 GUI 方案描述,是针对支持 DMA2D 和 LTDC 的 STM32。同时,为了聚焦于 ALPHA 通道的介绍,仅以图片生成的.c 文件为例,介绍图片显示方案。除此之外,STM32 还提供了其他丰富的 GUI 方案,能够直接支持各种格式的图片,例如.bmp, .png,.jpg 等。 2 x1 p3 d$ z/ X4 \( u+ \8 ^" v+ g |
实战经验 | Keil工程使用NEAI库的异常问题
STM32 ISP IQTune:真正零门槛的免费ISP调整软件
【经验分享】STM32 新建基于STM32F40x 固件库的MDK5 工程
意法半导体MCU双供应链策略,打消中国客户后顾之忧
【经验分享】基于STM32使用HAL库实现USB组合设备CDC+MSC
2024意法半导体工业峰会:赋能智能电源和智能工业,构筑可持续未来
ST推出灵活、面向未来的智能电表通信解决方案,助力能源转型
意法半导体 x Qu-Bit Electronix:推动新一轮的数字声音合成革命
从STM32 MPU产品看嵌入式系统中微处理器的新变化
【Hot!】STM32全系列开发板都支持Arduino开发,你知道吗?