
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啊? |
【STM32】总线架构
没学过51单片机,能否零基础学STM32?
STM32电机控制用什么型号?高级定时器功能详解与芯片选型指南
STM32H7R/S+TouchGFX:解锁智能家电沉浸式体验新维度
什么是STM32? STM32与ARM有什么关系? STM32能做什么?
STM32 不同时钟频率有什么不同的影响
《STM32H7R/S信息安全线上课程》学习笔记+安全存储
《STM32H7R/S信息安全线上课程》学习笔记+时域隔离,片内与片外存储器保护
《STM32H7R/S信息安全线上课程》学习笔记+跟着视频学一学
《STM32H7R/S信息安全线上课程》学习笔记+2.0 生命周期管理