
LTDC外设可以看成是一种M2LCD的的DMA,LTDC的初始化结构体中有一段映射地址,这个地址一般为片外RAM,也可以片内。程序修改这个RAM对应地址段的值,就会体现在屏幕上。就好比一个大数组,每个元素对应LCD的一个像素色。例如RGB888,那么每个像素点,有三个色,各占8bit,一个字节。一个像素点24bit,3字节。开辟一个这样的数组,与LTDC的起始地址段共地址,那么修改这个数组的元素值,就会体现在LCD屏幕上。这样就实现了屏幕显示。 DMA2D就直接是一种DMA了,加上了2D,不知道这个2D是 to display的意思还是2D图像的意思。不管怎么说,就是一种专门给图形显示加速的DMA无疑了。DMA2D可以混合两张图片,然后给LCD显示。其实我原来一直没有搞懂,这个混合怎么用。如果想混合,我需要3个GRAM空间。LTDC那个不能动,需要另外两个GRAM作为DMA2D的输入。由DMA2D完成混合之后,搬移到LTDC的GRAM上,实现显示。看到很多人实际的代码中,其实是只有两个GRAM,LTDC的GRAM和另外一片GRAM空间,由这俩空间混合后,搬移到LTDC的GRAM上。有点像a=a+b的意思。其实我一直觉得这样不好的原因并不是3片空间太浪费,主要是想不明白,LTDC的空间被修改之后,下一次往上附加或者混合别的内容,会不会有残留。举个例子,我想让一个图片移动。那么如果直接混合到LTDC的内存上,那么它就会把LTDC原来的信息覆盖,图片移走之后,虽然可以擦除图片痕迹,但LTDC怎么恢复之前的信息呢?这些需要再想想。因为即便有无数个GRAM空间,总有需要混合和覆盖的问题,都需要解决。除非每个GRAM的信息都能独立被保存,实时被刷新。以便重新覆盖有移动的地方的内存空位。这样代价会不会太大?有几个图层就需要几个刷新的线程,不断的更新。不断的混合。如果只是直接修改LTDC的存储还可以少点内存。如果每个图层用独立的GRAM空间,那就热闹了,得多大的RAM啊? |
拷打cubemx【003】——找不到的芯片包
【2025·STM32峰会】GUI解决方案实训分享5-调通板载的NRF24L01 SPI接口并使用模块进行无线通信(发送和接收)
【2025·STM32峰会】GUI解决方案实训分享4-使用MVP架构从硬件外设读取数据并显示到图形界面、从图形界面发送指令控制硬件外设
【2025·STM32峰会】GUI解决方案实训分享3-搭建空白TouchGFX例程并实现简单的功能(含硬件部分的串口打印)
【2025·STM32峰会】GUI解决方案实训分享2-编译运行TouchGFX咖啡机例程(含桌面仿真)
【2025·STM32峰会】+TouchGFX实现动态进度显示以及界面切换
【2025·STM32峰会】+使用TouchGFX快速创建GUI
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
实战经验 | 关于STM32H7使用LL库生成ADC代码工作异常问题说明
实战经验 | 关于STM32H745的MC SDK电机控制工程问题的解决办法