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

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

[复制链接]
KEY1 发布时间:2024-9-9 01:32
LTDC 与 DMA2D 的基本测试" g* X$ f  s5 N; W1 L

% A1 K9 r; ~; l7 ], o  M之前先看了ST官方的Demo,直接跑起来测试没问题,但是应用遇到些问题,于是我又找了正点原子的例程,
, y$ H, {/ H3 x9 G3 {2 \
% \( f0 o; s$ l6 X% M本来想着从 正点原子的例程中 获得一些有价值的参考代码, 结果太失望( q  E5 A/ P$ D8 Z# E
6 X& W2 t5 x" A
我得吐槽一下 ,正点原子的代码例子 有自己独特的风格,给外设做了驱动,但是很多代码是基于寄存器和自定义的结构体操作,很少 使用CubeMX生成,在实际工程使用会很麻烦1 t$ i8 k2 N. j
+ N, N6 T2 L/ Z( n/ g( p/ |
我个人 建议 使用CubeMX 生成代码  ,工程结构依照CubeMX生成的代码结构,
2 H9 k9 M8 f! M) ]& A( W+ T5 \, {. s: N/ A5 u9 d' h
在开发期间会更方便,虽然CubeMX生成的代码结构也不是统一的,也是有好几种。- N3 B) ]- i0 P) h
, ]+ Z+ P, p% @
先在CUbeMX 中对LTDC和DMA2D进行基本配置 ,- x7 V* n# U& n; t( z- t# }
8 g2 G  J9 J  n# Z2 z7 {
然后在程序中按 user 键, 程序将分别以不同的方式显示不同的图片" D' p6 ]1 z) M; O% ^9 w& W
3 m9 f- t6 W' ]
1  直接使用LTDC 输出FLash中的图片1(480*272),不占用缓存
3 X/ Q% E: t* M. H& F
2 L1 ?9 I% a; e4 \: B. f2 直接使用LTDC 输出FLash中的图片2(489*480),不占用缓存 (更改位置)
7 V# F7 C' `1 R1 S& Y; q' d$ b2 E) ^# @" N' q3 l; S
3 使用DMA2D 显示图片 1 ,使用缓存区 将Flash图像加载到显示缓存,
9 N- h7 C' S7 |5 [( j2 Q$ a
, [, F" U: g; G6 N, P$ H, R& c4 直接使用LTDC 输出FLash中的图片1(480*272),不占用缓存8 p3 B! Z) ]) I. R$ Y4 c
( x4 a& i& A( ?& p0 l+ B8 F
5 使用LTDC 刷新显示缓存并切换显示,然后使用DMA2D 切换显示2个图片
7 K/ J1 b8 |+ g3 }6 R
6 w$ ], l$ ^2 ^9 x. x9 |. K/ ?上面这些测试了LTDC 和DMA2D的 常用场景。
6 b: ]$ N1 E5 p) H6 I, Z3 x+ [1 y/ h9 m8 `) e
在测试中主会注意到:2 X  P6 ]; j% Y8 O+ G
: m; w0 ], f9 {  j# h. z
LTDC 刷新屏幕 需要如何操作,如果使用中断, 会产生哪些中断?0 I, D# \2 \8 T" t. A# H& p8 N
9 m" L  C1 s4 {1 i% q- k
DMA2D刷新屏幕时如何操作 ,会产生哪些中断?
$ `+ G5 \1 ~: ~( w! J' F; p  G5 A( Y3 C6 t
CubeMX配置(在代码中还需要随时调整):# k( y# p0 O4 k! O1 V, F
5 ]# u4 s3 B8 M1 ^, d! T
![图片.png](data/attachment/forum/202409/04/105159antlw5wofflu1jjk.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")6 Q3 w; d, G' N: ^5 l
, S  m& ^0 X6 {, ]! I  B/ _
![图片.png](data/attachment/forum/202409/04/105309c9ow96584pb89z4w.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")+ v2 u1 {9 P! y
4 d% i$ ]$ O5 \* g
DMA2D参考配置
0 O% L0 `9 V8 h" P4 m5 X
1 T) y+ n0 |* l2 n/ Q' w![图片.png](data/attachment/forum/202409/04/142820gwlshj4yh144pjye.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")" h3 u0 t/ Z4 i5 S/ J

( A- y; X2 x* Q( }. ?; V1 DLTDC参考代码:+ W; h$ E6 T8 H
3 G" j$ `& r2 t+ s% K2 x( s5 ^3 n
```. V1 j1 Q6 S" Q' J4 C
     WindowSize_x =480;     // 设置显示窗体大小, 小于等于屏幕像素- h  h# U( y* n% R  l
     WindowSize_y = 272;    // 设置显示窗体大小, 小于等于屏幕像素3 D, ^( X% G( A. D- z; ^( K- X6 w# z
     WindowPosition_x=0;    // 设置显示窗体的起始位置X,相对于屏幕像素
& A( @1 m, s/ w; ?( b0 S: `" f- G     WindowPosition_y=100;  // 设置显示窗体的起始位置y,相对于屏幕像素$ ~4 C3 P0 |7 Z; m- U
     imagPitch=480;
' M3 d& O& x  k' O9 e7 W; h! m7 L# c  L+ U
      HAL_LTDC_SetWindowSize_NoReload(&hltdc,WindowSize_x,WindowSize_y,LTDC_LAYER_1);
: A8 Y2 j) p* Y1 ]8 O! ~6 u0 x      HAL_LTDC_SetWindowPosition_NoReload(&hltdc,WindowPosition_x,WindowPosition_y,LTDC_LAYER_1);7 F+ A6 O6 k$ ]$ q2 X
      HAL_LTDC_SetPitch_NoReload(&hltdc,imagPitch,LTDC_LAYER_1);
- ?: [0 x2 \+ X4 B$ l. r& `      HAL_LTDC_SetAddress(&hltdc, (uint32_t)&gImage_test,LTDC_LAYER_1);
; }1 A% N  [& a* Q; v" w  }      HAL_LTDC_Reload( &hltdc,LTDC_RELOAD_VERTICAL_BLANKING);
) {! L9 X9 z5 R! I- e7 E6 g' E```
+ S. v& z! h$ i5 u8 `1 p0 f/ z
2 K; \8 Q+ K7 {" r7 y. gDMA2D参考代码:
4 S/ M- u# D7 d  C5 `+ v/ }1 T, p! n- l! c5 p; S* i
```' a- ~8 I0 @2 n" d

9 ?. i% T# a/ ~* M( S1 W( [  /* Set LTDC layer1 source address */
& I. Y2 E; b! I$ i1 `  HAL_LTDC_SetAddress(&hltdc, (uint32_t)(&aBufferResult), LTDC_LAYER_1);
" F; }' p5 X: {1 y1 @& Q( |$ w# D
5 z, M* N+ P$ E) J6 Z8 r8 S  ]9 m* k  /*## DMA2D Callbacks Configuration ######################################*/
' H* S' O  J2 b, j& D6 F  hdma2d.XferCpltCallback  = TransferComplete;
& T& G/ Z8 O" B# o9 D3 u$ b- A9 I  hdma2d.XferErrorCallback = TransferError;- f7 S( F2 V' }
9 X. u2 z9 n; t3 x) J! i" \
  /*## Start DMA2D transfer ###############################################*/2 R% C) V6 `% b# g! _
  hal_status = HAL_DMA2D_Start_IT(&hdma2d,+ _, G7 _2 d; m" {$ s
                        0xF0FF, /* Color value in Register to Memory DMA2D mode */! x& J9 V0 ?2 w3 {8 ~" `" N  P8 m  o
                        (uint32_t)&aBufferResult,  /* DMA2D output buffer */9 @9 N; e; h! ~$ R; O" y* p
                        LAYER_SIZE_X, /* width of buffer in pixels */
+ w" q# S1 ?. G9 o9 P) ~- D                        LAYER_SIZE_Y); /* height of buffer in lines */
: q0 f5 i) k8 o5 y  V  if (hal_status != HAL_OK)
: l& }$ ]3 u5 t: y4 q   {2 s4 B! S! @% _1 ^
    Error_Handler();( ~! p8 z5 z5 s: T: U, z2 J
   }2 }, m, C% t& \7 S- K, F
```5 l7 O9 s# }2 V7 H
3 S! ~* }3 h0 T0 K3 t5 G4 ]
视频链接:
7 _' l8 M. \* |2 L3 H5 s
+ u; ?% e. G2 I9 i1 H5 x# `2 xhttps://www.bilibili.com/video/BV1AepzeYEYz?share_source=copy_web
% x7 n% ~0 Y* V! ?
269e2dc0dcfc476d347b8ef2e606c56.jpg
图片.png
图片.png
图片.png
图片.png
收藏 评论3 发布时间:2024-9-9 01:32

举报

3个回答
STMCU-管管 回答时间:2024-9-9 11:42:57
方便的话做个演示视频,我可以帮你上传
" u0 K6 E+ E2 `; Z* B
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
方便的话做个演示视频,我可以帮你上传

如何上传视频呢?

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版