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

实验经验 | LTDC RGB 接口 LCD TouchGFX 工程的移植步骤

[复制链接]
STMCU-管管 发布时间:2025-2-6 09:47
1+ H% @4 m4 _' l+ t$ m- h
引言2 N" t/ m2 B! i( n$ t) l
文档基于 STM32F746G_DISCO 硬件平台,参考从 TouchGFX Designer 下载的 STM32F746 的 TBS(TouchGFX Board Setup),讲解 STM32CubeMX 相关配置,介绍了LTDC RGB 接口 LCD 的 TouchGFX 工程的移植步骤。
4 B. J3 R% ^" g( |: }( U
12.png
▲ 图1. TouchGFX Designer 中的 STM32F746G_DISCO TBS
, V+ }7 t& G2 Q

" L# _- @% b" `9 w( q' ]7 i2   P) W- M# K1 x( ?/ z8 Y( f9 }
STM32CubeMX 配置过程
% c+ r+ X- v( z- q" MSTM32F746G_DISCO 有两个外部存储器,SDRAM 和 QSPI Flash,SDRAM 用于帧缓冲器,QSPI Flash 用于存储图片、字体等素材,其图形实现过程如图 1 所示。本文档参考从 TouchGFX Desinger 上下载的 TBS,第一步首先完成 IOC 文件的配置,由于会使用 外部 RAM 和外部 Flash,生成代码后还需要添加相应的存储器驱动代码,以及修改链接文件。对于仅使用内部 Flash 和内部 RAM 的应用,用 STM32CubeMX 和 TouchGFX Desinger 生成代码后,就可以直接使用 TouchGFX 点亮屏幕了。 3 H* z1 N; g" ^$ e# Y0 K& q2 a( H' h+ f
13.png
▲ 图2. 图形实现过程

; Y8 U; L7 A% g  U9 @7 Z( \% c2.1. 新建 IOC 工程
( D: {0 ^/ U$ e3 l) C
. F; H/ a0 T: l6 [4 B( i8 t2 E

) W, E  Y; Q, i0 x- t+ Y双击打开 STM32CubeMX 软件,按照图中 1-5 步骤操作,MCU 型号输入 STM32F746NGH6 进行选择,其中第 5 步提示配置默认 MPU 单元来优化内核的推测性 读取访问,请点击“YES”。
2 b6 v' V/ d8 I/ z6 d1 j
14.png
▲ 图3. 新建 STM32CubeMX 工程
然后点击“Project Manager”,配置工程名称,如图所示。
8 s3 \, f2 J' @8 _
15.png
▲ 图4. 配置工程名称
) X) G0 T. r( c0 c, a9 g
8 q  Y1 K5 j; l0 _8 X+ }- y
2.2. CORTEX_M7 5 h2 \  q  W4 K. d( L( h
. C/ R- v& \1 D- w  Z. p+ K
" v, W/ B' ^/ h0 ~" E! {
这里使能 ICACHE 和 DCACHE,并配置内存保护单元 MPU,要正确配置 MPU 属性 以避免由 Cortex®-M7 推测性读取访问和缓存维护引起的图形性能问题,使用 STM32CubeMX 可以轻松配置 MPU 存储器属性。详细配置过程可以参考 AN4861 4.6 小节 Special recommendations for Cortex-M7 (STM32F7/H7),其中介绍对嵌入了 Cortex®-M7 CPU 的 STM32F7 系列的一些建议,建议大家仔细阅读下。
% m+ e. U8 N8 ]5 L5 \
/ z" M. Q* g5 \2 d( x2 j
, o% t2 @, H: ]0 w+ ]3 R7 p) N
2.3. CRC
8 ]; j2 @& X! q9 G* w* J1 `) ?5 o! ^3 p7 |, E" J4 n

2 ?. F( z7 k7 e& |; oCRC 是循环冗余校验计算单元,如果要使用 TouchGFX,必须要使能 CRC,其配置保 持默认即可。
. B5 j, a! w8 Q" w! u0 n9 F% X1 [
- }* |) D3 o  |; ^; H
16.png
▲ 图5. 使能 CRC
6 I* q8 ]' U/ g$ P& U
2.4. DMA2D ! T* o$ F  t, n! n2 R: a
  m; [) L% r% }9 s4 }, Z' G/ j
$ v+ G9 [0 A% Q. N  K
DMA2D 是 AHB 总线矩阵上的主设备,它将图形数据传输到内存,也可用于图形渲 染,建议使用 DMA2D 来减轻 CPU 负载。DMA2D 使能后保持默认配置即可,当需要 DMA2D 来进行图形加速时,TouchGFX 引擎会自动调用 DMA2D。 % }; M# Y' n8 M% m+ z% U6 e' |$ C/ `

! f* r# e* G5 X; K
17.png
▲ 图6. 使能 DMA2D

6 e0 [( ]! d7 e  X+ n3 @2.5. FMC 配置 LTDC 帧缓存区和 Video 缓冲区放在了外部 SDRAM 中。配置 FMC 相关参数时,需 要对照原理图和 SDRAM 的 datasheet,了解相关参数,然后进行配置。配置结束后,需 要添加相应的驱动代码,将其配置内存映射模式。
( t5 v+ U1 v* \% J
18.png
▲ 图7. FMC 配置
/ R' k; `' m4 ?: v, f) ?
! w9 M% F6 r2 }% B2 I, V
2.6. FREERTOS 8 p" J2 H+ ^! A

- b3 C, w  y$ `5 o6 @' M& @

# `# w+ J7 b: U- c% x, ZTouchGFX 可以运行在有 RTOS 和无 RTOS 的工程中,本工程移植的是带有 RTOS, RTOS 选择 FreeRTOS,在本工程中新增了 2 个 task,TouchGFXTask 任务用于运行ToucGFX 图形引擎,VideoTask 任务用于进行 Mjpeg 视频的编解码,如果您的项目不用 video 控件,那么 videoTask 可以不用添加。
  Q* x! y+ B  w
19.png
▲ 图8. FreeRTOS 新增任务

) j. ^8 c: W5 x) r1 U
8 N+ w/ |- q1 b, T9 s8 e0 p2 Z2 [
注意新增总的堆空间大小,防止新建任务的栈大小不足。
, ]6 }' f0 P) l" Z! X+ \" g+ d, ?$ l" s9 z9 r# w! J

$ Y% Y% X' Y! |. v
20.png
▲ 图9. 堆空间大小配置

' @2 @( F$ ?- J' c2.7. GPIO
8 j+ Z; A6 D$ g2 T5 c, y. E8 U. H! u: Q" }, o3 Q
! ^) `" Z4 |9 N
在官方下载的 TBS,配置的 GPIO 如图 9 所示。与 LCD 显示相关的引脚有 2 个, LCD_DISP 和 LCD_BL_CTRL。LCD_DISP 用来启用/禁用显示待机模式,需要将 LCD_DISP 配置为高电平来启用显示器,否则显示器将保持待机模式。LCD_BL_CTRL 信 号上的高电平可以点亮背光,而低电平则将其关闭。
5 {3 @9 h! P# [$ E: `/ S: }1 n8 h( u) Z9 I

, A. k' {, A% Q2 ]2 M# S3 G6 y" z另外几个 GPIO 引脚可以用来测试性能的,它们的解释说明可以查看 TouchGFXGPIO.cpp 中注释,其中 RENDER_TIME,可以用来查看实际的渲染时间。! i, U1 x9 O* ]. {: q. u

* M6 B3 C; q- F# }# g' W/ d$ Q+ d

2 H' n' n/ w4 e0 n  \; h6 p/ y( ~
21.png
▲ 图10. GPIO 配置

/ u5 W, V6 t4 V0 \( W0 W0 x* m- {2.8. I2C3 - }, O4 [& ^# c. `7 _; y/ ]

) v5 Z: g- l# L

3 z. c( e! r% N. `1 N; D" c9 dSTM32F746G_DISCO 的电容 LCD 的触摸的接口是 I2C3 的 PH7 和 PH8,相关参数 的配置参数如图所示。
4 Y. I. x! \2 T; p
( A! ^; D7 D" y) v, q+ e
22.png
▲ 图11. I2C3 配置

9 H3 |( n2 g; D& ~9 Q
& p, j- {9 Y1 [: ^$ B3 \
2.9. LIBJPEG # @# A. a9 ]' ]! F& w; U* m
. V/ S/ y6 {5 H% P  M8 k0 |/ E' I5 i

$ ]; Z0 x  w$ s3 E9 \如果 TouchGFX 使用 Video 控件,要使能 LIBJPEG,用于视频流的软件编解码。如果 您的工程用不到 Video 控件,那么可以不用使能 LIBJPEG。
' N0 N& m8 [& R. ]+ [1 f- s: O! c( i2 ?& @2 ]$ X
23.png
▲ 图12. GPIO 配置

1 }0 c' O/ D' ^5 G7 ]. N

9 B1 W" m! o  \3 S- y9 E2.10. LTDC
4 d& Z9 X; N1 t0 u8 d* M. @8 `; B* p! j5 Z& F# V% L: ^
- `- K. k. w6 g; }" V3 f0 q
LTDC 外设主要用来配置 LCD 显示接口,对于 STM32F746G_DISCO 的 LCD 可以参 考下载的 TBS 进行配置。如果是其他型号的 LCD,需要查看 LCD 的屏幕时序表进行配 置。关于 LTDC 的 layer,虽然在 STM32CubeMX 可以配置为 2 个 layers,但是 TouchGFX Designer 是采用 1 个 layer 来做 GUI 开发的,这是因为 2 个 layer 会占用更 多带宽,同时打开 LTDC 全局中断和错误中断。
! _" M( Q' w4 X" e: x
( c3 `2 Z& L( ?5 ^  M& X
24.png
▲ 图13. LTDC 参数配置

5 b9 ^2 e+ d% A
25.png
▲ 图14. LTDC layer 配置
26.png
▲ 图15. 打开 LTDC 全局中断和错误中断
! e1 ^+ V/ u; A. m
4 C6 H+ _) z6 s2 }2 n1 w9 M
2.11. QUADSPI 2 Q0 z& }, z* c+ A
当要存储的数据量相对较少时,可以使用内部 FLASH 存储器。否则,应将图形内容放 置在外部存储器中。QUADSPI 外接了一个 128-Mbit Quad-SPI NOR Flash。! `/ {. z* F1 o3 Q" E8 `0 E
! A' V3 s+ ~' ~( b$ a3 b
27.png
▲ 图16. QUADSPI 配置
4 ]! Z0 |" Y/ V

3 N" @& H9 |0 n# k" C  a5 Q2.12.SYS
7 T/ A) p3 p! Y7 }由于 SysTick 被 RTOS 使用,这里 HAL 库的时基选择 TIM6。7 |! j, }/ a7 n& P/ m& P# Y

9 ^/ P. ~! ^3 p5 f1 s
28.png
▲ 图17. 系统时钟配置
) `5 T1 |: x, x8 n& ]7 I

: Q/ S" w. Y5 D% {  b2.13. X-CUBE-TOUCHGFX 5 v- w/ f$ Q- {
Interface:接口选择 Parallel RGB(LTDC)
% E0 x) |1 ~* O7 x1 I) T* u6 L对于 RGB 接口的 LCD 来说,通常无内置 GRAM,FrameBuffer Strategy 无法使用 Partial Buffer 策略。在 RAM 足够时,可选择 Double Buffer 策略。存放位置选择 By Allocation。这个可以通过链接文件配置放置在什么位置。. j. [& m& [' [3 m
Application Tick Source:应用滴答时钟来源,选择 LTDC,它的实现代码可以在 TouchGFXGeneratedHAL.cpp 中 HAL_LTDC_LineEventCallback 函数找到。
4 [/ ]3 }7 x' n" I: @4 A! t5 ?- V8 [. t! O* m" v# D0 z
29.png
▲ 图18. TouchGFX 配置
0 M2 m+ ~5 u6 p7 ^# P' G

! Z/ H, u2 X0 E7 Y8 S2 A2.14.Clock Configuration + ?8 P, z2 I2 z4 h
系统时钟配置为 216MHz,LTDC 时钟配置为 9.6MHz,这个 LTDC 时钟的配置是参 考 LCD 时序参数表确定的,它与 LCD 的刷新率相关。' L/ K. j  x. S) |& j

7 @* ?" c8 B# S, u* O
30.png
▲ 图19. 时钟树配置

2 h1 ?, S! [( B' a+ e( t3 e至此,外设配置基本完成,选择所使用的 IDE(这里选择的是 STM32CubeIDE),点 击 Generate Code 按钮,生成代码。然后使用 TouchGFX Designer 打开 TouchGFX 文 件夹下的 ApplicationTemplate.touchgfx.part,在 TouchGFX Designer 中生成 UI 相关 代码。$ ]9 [( T+ p7 A& m
5 z, r5 ]7 l8 j+ {* h1 D2 F
& z% E. A: ]) ^8 {7 d0 ~
3
+ K" B. U9 L8 v/ H- s4 `% X# M$ s/ Y添加驱动代码 , e+ @; X6 O% s0 J' c
对于 LTDC 接口的 TouchGFX 工程,使用 TouchGFX Desiger 生成代码后,如果仅使 用内部 RAM 和 Flash,那么在 TouchGFX 生成代码后,整个软件架构就建好了,可以使 用 TouchGFX 来点亮屏幕了。5 D2 b- A7 h5 f" B3 h* j
- o: _) q! {; t& }
对于使用外部 SDRAM、 QSPI Flash 以及触摸功能的应用可以参考下载的 TBS 进行对 照检查,添加相应的驱动代码和修改链接文件,完善整个工程代码后实现 TouchGFX 点亮 LCD 的效果。  ^% v% y; x  g8 ?
; E7 q% q7 H) C% n8 D+ O+ p

0 D. d% {) H# B. ^3.1. 添加 SDRAM 驱动代码  D$ Q; S/ ^3 [" T  r2 e
查看下载的 TBS,可以在 main.c 中的 MX_FMC_Init()函数的用户代码区域看到添 加的驱动代码。这里有一点要说明的是最后的 FMC_Bank1->BTCR[0] = 0x000030D2 代 码是禁用 FMC bank1,这点在 AN4861 的 4.6.1 Disable FMC bank1 if not used 有详 细介绍。为了防止 FMC bank1 上的 CPU 推测性读取访问,建议在不使用时将其禁用。这可以通过复位 FMC_BCR1 寄存器中的 MBKEN 位来完成,默认情况下该位在复位后使能。
. c; [! k, `$ S6 W! N
( R- {) D2 _( g( O

/ B/ j3 P) Q# E! P) E6 S% J9 E8 u3.2. 添加 QSPI Flash 驱动代码 2 a% w) a0 d( @
添加驱动代码把 QSPI Flash 配置成 memory mapped 模式。
% I1 J8 o$ p  y0 |( I$ F
/ Q8 }" C: ?- D: A
2 u* @5 A; B( c0 W4 B
3.3. 添加 Touch 功能 3 L( R4 ~4 y" X% A: I- ]7 F
触摸功能在 STM32TouchController.cpp 中实现,具体代码请参考 TBS。
& }2 `# F- o* L% j& G/ c- z
# M7 d" {/ V  [- t

+ o1 w, u/ E' r3.4. 修改链接文件4 O1 {# T' D( C" w4 ?  }
为了把帧缓冲区和视频缓冲放到外部 SDRAM,把字体、图片等素材放到外部 Flash, 需要修改链接文件。不同的 IDE,它的链接文件是不同的。对于 STM32CubeIDE,它的 链接文件是 STM32F746NGHX_FLASH.ld,对于 EWARM,它的链接文件是 stm32f746xx_flash.icf,对于 MDK-ARM,它的链接文件是 STM32F746G_DISCO.sct, 它们的语法略有不同。大家可以参考它的结构进行修改。
; Y# s( B4 Q* Z# i+ d$ K* h. b  \
9 f& F4 e. C' ~3 r0 b

, N( C# ]% _0 Z  x$ n  x# }1 z4
1 ]2 _8 F1 z5 K小结 $ j' [& w: s& T, c& S
以上就是 LTDC RGB 接口 LCD 的 TouchGFX 工程的移植步骤,本文档对关键步骤进 行了解释说明,具体细节可参考 AN4861 和官方的 TBS。
1 h. K) R' M0 i' F1 D& V2 i6 l; D: I4 b/ b) `: V
% A# B& Y* Y' h+ Z
▼▼▼
点击按钮下载《LTDC RGB 接口 LCD TouchGFX 工程的移植步骤》原文档。
: Z! f2 f* _! a3 W- j8 s点击下载; S9 p) O0 s% z) J, m0 b2 M' C0 ^9 H

" K. V/ P7 ^, v9 [$ P+ E
收藏 评论2 发布时间:2025-2-6 09:47

举报

2个回答
电子烂人 回答时间:2025-2-8 10:51:28

挺有趣的,抽空试一下移植到H743上

STMCU-管管 回答时间:2025-2-12 13:51:17

电子烂人 发表于 2025-2-8 10:51
挺有趣的,抽空试一下移植到H743上

可以试试

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版