LTDC 与 DMA2D 的基本测试" g* X$ f s5 N; W1 L 之前先看了ST官方的Demo,直接跑起来测试没问题,但是应用遇到些问题,于是我又找了正点原子的例程, 本来想着从 正点原子的例程中 获得一些有价值的参考代码, 结果太失望( 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生成的代码结构, + 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),不占用缓存 2 直接使用LTDC 输出FLash中的图片2(489*480),不占用缓存 (更改位置) ' d$ b2 E) ^# @" N' q3 l; S 3 使用DMA2D 显示图片 1 ,使用缓存区 将Flash图像加载到显示缓存, 4 直接使用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个图片 上面这些测试了LTDC 和DMA2D的 常用场景。 6 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 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参考配置 ![图片.png](data/attachment/forum/202409/04/142820gwlshj4yh144pjye.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")" h3 u0 t/ Z4 i5 S/ J LTDC参考代码:+ 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,相对于屏幕像素 WindowPosition_y=100; // 设置显示窗体的起始位置y,相对于屏幕像素$ ~4 C3 P0 |7 Z; m- U imagPitch=480; 7 W; h! m7 L# c L+ U HAL_LTDC_SetWindowSize_NoReload(&hltdc,WindowSize_x,WindowSize_y,LTDC_LAYER_1); 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); HAL_LTDC_SetAddress(&hltdc, (uint32_t)&gImage_test,LTDC_LAYER_1); HAL_LTDC_Reload( &hltdc,LTDC_RELOAD_VERTICAL_BLANKING); ``` DMA2D参考代码: ! n- l! c5 p; S* i ```' a- ~8 I0 @2 n" d /* Set LTDC layer1 source address */ HAL_LTDC_SetAddress(&hltdc, (uint32_t)(&aBufferResult), LTDC_LAYER_1); /*## DMA2D Callbacks Configuration ######################################*/ hdma2d.XferCpltCallback = TransferComplete; 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 */ LAYER_SIZE_Y); /* height of buffer in lines */ if (hal_status != HAL_OK) {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 ] 视频链接: https://www.bilibili.com/video/BV1AepzeYEYz?share_source=copy_web |
【STM32H7S78-DK评测】XIP项目源码分析
【STM32H7S78-DK评测】步进电机控制介绍一与tensorflow安装与测试
【STM32H7S78-DK】rtthread 增加 psram 内存管理
【STM32H7S78-DK】基于 rtthread 适配 sdcard 文件系统
【STM32H7S78-DK】开箱与rtthread工程初体验
【STM32H7S78-DK评测】简单开箱和Demo体验
【STM32H7S78-DK评测】XIP模板问题处理与电机控制
【STM32H7S78-DK评测】CoreMark移植和优化--兼记printf重定向实现方法及常见问题
【STM32H7S78-DK评测】开发板初识与工程模板创建
【STM32H7S78-DK评测】TouchGFX (QR Code)二维码生成器
我做了视频传到了B站,然后把链接粘贴了进来,在编辑状态下能显示,但是发布后好像不能正常显示
如何上传视频呢?