[STM32H7]

【STM32H7S78-DK测评】6.LTDC+DMA2D驱动显示图形

[复制链接]
393|0
手机看帖
扫描二维码
随时随地手机跟帖
cooldog123pp|  楼主 | 2024-9-30 11:12 | 显示全部楼层 |阅读模式
本帖最后由 cooldog123pp 于 2024-10-11 08:05 编辑

先介绍一下DMA2D,在实际使用LTDC控制器控制液晶屏时,使LTDC正常工作后,往配置好的显存地址写入要显示的像素数据,LTDC就会把这些数据从显存搬运到液晶面板进行显示,而显示数据的容量非常大,所以我们希望能用DMA来操作,针对这个需求,STM32专门定制了DMA2D外设,它可用于快速绘制矩形、直线、分层数据混合、数据复制以及进行图像数据格式转换,可以把它理解为图形专用的DMA。
1081166fa14f1e79b0.png
我这边也是学习了官方的demo,首先要配置LTDC和DMA2D,LTDC不赘述了,看下DMA2D
DMA2D配置.png
配置完成后看下,初始化调用和初始化程序
MX_DMA2D_Init调用.png
static void MX_DMA2D_Init(void)
{

  /* USER CODE BEGIN DMA2D_Init 0 */

  /* USER CODE END DMA2D_Init 0 */

  /* USER CODE BEGIN DMA2D_Init 1 */

  /* USER CODE END DMA2D_Init 1 */
  hdma2d.Instance = DMA2D;
  hdma2d.Init.Mode = DMA2D_R2M;
  hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB4444;
  hdma2d.Init.OutputOffset = 0;
  if (HAL_DMA2D_Init(&hdma2d) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN DMA2D_Init 2 */

  /* USER CODE END DMA2D_Init 2 */

}

先要定义一个buffer,然后通过HAL_DMA2D_Start_IT打开DMA2D,画一个蓝色方框
  hal_status = HAL_DMA2D_Start_IT(&hdma2d,
                        0xF0FF, /* Color value in Register to Memory DMA2D mode */
                        (uint32_t)&aBufferResult,  /* DMA2D output buffer */
                        LAYER_SIZE_X, /* width of buffer in pixels */
                        LAYER_SIZE_Y); /* height of buffer in lines */
可以看下效果
原始效果.jpg
在此过程中,我用stm32cubeide的工程调试时总是报错,后来换成mdk就OK不知道哪位大神知道原因,报错如下:
QQ20240930-111127.png


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1859

主题

6466

帖子

30

粉丝