接着对DMA2D传输操作进行封装,编写一个DMA2D传输函数: 代码语言:javascript 复制 staticvoiddma2d_transfer_data_r2m(uint32_t*addr,uint32_t xSize,uint32_t ySize,uint32_t offsetLine,uint16_t color){DMA2D->CR=DMA2D_R2M;// dma2d mode: register to memory.DMA2D->OPFCCR=DMA2D_OUTPUT_RGB565;DMA2D-...
STM32F429芯片使用LTDC、DMA2D及RAM存储器,构成了一个完整的液晶控制器。LTDC负责不断刷新液晶屏,DMA2D用于图像数据搬运、混合及格式转换,RAM存储器作为显存。其中显存可以使用STM32芯片内部的SRAM或外扩SDRAM/SRAM,只要容量足够大即可(至少要能存储一帧图像数据)。 27.5. LTDC初始化结构体 控制LTDC涉及到非常多的寄存...
DMA2D->OPFCCR = pixelFormat; // 设置颜色格式,比如想设置成RGB565,就可以使用宏LTDC_PIXEL_FORMAT_RGB565 一切都设置完毕,DMA2D已经获取到了填充这个矩形所需要的全部信息,接下来,我们要开启DMA2D的传输,这通过将DMA2D的CR寄存器的第0位设置为1来实现: DMA2D->CR |= DMA2D_CR_START; // 开启DMA2D的数据传输,...
接着对DMA2D传输操作进行封装,编写一个DMA2D传输函数: static void dma2d_transfer_data_r2m(uint32_t *addr, uint32_t xSize, uint32_t ySize, uint32_t offsetLine, uint16_t color) { DMA2D->CR = DMA2D_R2M; // dma2d mode: register to memory. DMA2D->OPFCCR = DMA2D_OUTPUT_RGB565; DMA2D-...
我这里使用STM32H563开发板来简单演示一下DMA 2D模式的应用。所谓DMA 2D模式,个人理解是DMA可以通过事先设置块内寻址偏移量和块寻址偏移量来动态调整DMA的寻址方式及能力。换句话说,DMA在进行数据传输时,块内寻址不再总是固定相邻存放,而是可以通过编程决定相邻两次传输时访问数据的地址间隔。对于重复性的块传输,也...
使能DMA2D可以通过这个宏来实现(硬件初始化时使能一次即可): 1// 使用DMA2D之前一定要先使能DMA2D外设2__HAL_RCC_DMA2D_CLK_ENABLE(); DMA2D的简介 我们先来看看ST是怎么描述DMA2D的 乍一看有点晦涩,但其实说白了就以下几个功能: 颜色填充(矩形区域) ...
DMA2D里面有一个重要的概念就是行偏移,这知识点务必要认识到位,详见本章2.2小节。 DMA2D可以直接绘制ARGB8888,RGB565颜色格式位图,并且可以方便的做各种透明效果和图像混合显示。 LCD的加速全靠DMA2D,所有务必要熟练掌握其用法。 56.2 DMA2D驱动设计 56.2.1 DMA2D驱动设计思路 ...
DMA2D里面有一个重要的概念就是行偏移,这知识点务必要认识到位,详见本章2.2小节。 DMA2D可以直接绘制ARGB8888,RGB565颜色格式位图,并且可以方便的做各种透明效果和图像混合显示。 LCD的加速全靠DMA2D,所有务必要熟练掌握其用法。 56.2 DMA2D驱动设计 56.2.1 DMA2D驱动设计思路 ...
DMA2D里面有一个重要的概念就是行偏移,这知识点务必要认识到位,详见本章2.2小节。 DMA2D可以直接绘制ARGB8888,RGB565颜色格式位图,并且可以方便的做各种透明效果和图像混合显示。 LCD的加速全靠DMA2D,所有务必要熟练掌握其用法。 56.2 DMA2D驱动设计 56.2.1 DMA2D驱动设计思路 ...
可以看到lv_gpu_stm32_dma2d_copy调用后,bug出现了。 可以看到刷新区域inv_areas[4]的x2是小于x1的, 那么更新区域的宽度计算出来就是个负数。 然后看一下DMA2D控制器的NLR寄存器, 高16位是填定宽度, 如果宽度是个负数,被当成无符号数就是个很大的数, 所以DMA2D控制器启动就会copy很长一段数据到目标Display bu...