你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32H7S78-DK评测】-4 LTDC&DMA2D 基本测试

[复制链接]
KEY1 发布时间:2024-9-9 01:32

LTDC 与 DMA2D 的基本测试

之前先看了ST官方的Demo,直接跑起来测试没问题,但是应用遇到些问题,于是我又找了正点原子的例程,

本来想着从 正点原子的例程中 获得一些有价值的参考代码, 结果太失望

我得吐槽一下 ,正点原子的代码例子 有自己独特的风格,给外设做了驱动,但是很多代码是基于寄存器和自定义的结构体操作,很少 使用CubeMX生成,在实际工程使用会很麻烦

我个人 建议 使用CubeMX 生成代码 ,工程结构依照CubeMX生成的代码结构,

在开发期间会更方便,虽然CubeMX生成的代码结构也不是统一的,也是有好几种。

先在CUbeMX 中对LTDC和DMA2D进行基本配置 ,

然后在程序中按 user 键, 程序将分别以不同的方式显示不同的图片

1 直接使用LTDC 输出FLash中的图片1(480*272),不占用缓存

2 直接使用LTDC 输出FLash中的图片2(489*480),不占用缓存 (更改位置)

3 使用DMA2D 显示图片 1 ,使用缓存区 将Flash图像加载到显示缓存,

4 直接使用LTDC 输出FLash中的图片1(480*272),不占用缓存

5 使用LTDC 刷新显示缓存并切换显示,然后使用DMA2D 切换显示2个图片

上面这些测试了LTDC 和DMA2D的 常用场景。

在测试中主会注意到:

LTDC 刷新屏幕 需要如何操作,如果使用中断, 会产生哪些中断?

DMA2D刷新屏幕时如何操作 ,会产生哪些中断?

CubeMX配置(在代码中还需要随时调整):

图片.png

图片.png

DMA2D参考配置

图片.png

LTDC参考代码:

     WindowSize_x =480;     // 设置显示窗体大小, 小于等于屏幕像素
     WindowSize_y = 272;    // 设置显示窗体大小, 小于等于屏幕像素
     WindowPosition_x=0;    // 设置显示窗体的起始位置X,相对于屏幕像素
     WindowPosition_y=100;  // 设置显示窗体的起始位置y,相对于屏幕像素
     imagPitch=480;

      HAL_LTDC_SetWindowSize_NoReload(&hltdc,WindowSize_x,WindowSize_y,LTDC_LAYER_1);
      HAL_LTDC_SetWindowPosition_NoReload(&hltdc,WindowPosition_x,WindowPosition_y,LTDC_LAYER_1);
      HAL_LTDC_SetPitch_NoReload(&hltdc,imagPitch,LTDC_LAYER_1);
      HAL_LTDC_SetAddress(&hltdc, (uint32_t)&gImage_test,LTDC_LAYER_1);
      HAL_LTDC_Reload( &hltdc,LTDC_RELOAD_VERTICAL_BLANKING);

DMA2D参考代码:


  /* Set LTDC layer1 source address */
  HAL_LTDC_SetAddress(&hltdc, (uint32_t)(&aBufferResult), LTDC_LAYER_1);

  /*## DMA2D Callbacks Configuration ######################################*/
  hdma2d.XferCpltCallback  = TransferComplete;
  hdma2d.XferErrorCallback = TransferError;

  /*## Start DMA2D transfer ###############################################*/
  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 */
  if (hal_status != HAL_OK)
   {
    Error_Handler();
   }

视频链接:

https://www.bilibili.com/video/BV1AepzeYEYz?share_source=copy_web

269e2dc0dcfc476d347b8ef2e606c56.jpg
图片.png
收藏 评论4 发布时间:2024-9-9 01:32

举报

4个回答
STMCU-管管 回答时间:2024-9-9 11:42:57
方便的话做个演示视频,我可以帮你上传" u: I7 s9 {& B4 Z$ l
KEY1 回答时间:2024-9-9 16:36:10

STMCU-管管 发表于 2024-9-9 11:42
方便的话做个演示视频,我可以帮你上传

我做了视频传到了B站,然后把链接粘贴了进来,在编辑状态下能显示,但是发布后好像不能正常显示

KEY1 回答时间:2024-9-9 20:16:55

STMCU-管管 发表于 2024-9-9 11:42
方便的话做个演示视频,我可以帮你上传

如何上传视频呢?

STMCU-管管 回答时间:2024-11-4 11:20:34
视频
" f- F% @1 j$ Y
% [5 w5 Y( g0 K. y( d9 K3 R, c: ]+ R
. E) L4 P0 G! A9 K' s0 o1 p' R) ]! [

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版