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

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

[复制链接]
STMCU-管管 发布时间:2025-2-6 09:47
1
: p+ p$ |' b7 `/ u引言
5 x1 ^) |) S4 P0 i( _, p* B. K文档基于 STM32F746G_DISCO 硬件平台,参考从 TouchGFX Designer 下载的 STM32F746 的 TBS(TouchGFX Board Setup),讲解 STM32CubeMX 相关配置,介绍了LTDC RGB 接口 LCD 的 TouchGFX 工程的移植步骤。 7 P  d8 m0 y0 v, F/ \
12.png
▲ 图1. TouchGFX Designer 中的 STM32F746G_DISCO TBS
. P. _" Y, |8 [. W2 e, K

( k. q0 r' f" A6 Y2
1 \% S  O# F' VSTM32CubeMX 配置过程 8 `' f5 P% p# i6 a3 w/ F8 h
STM32F746G_DISCO 有两个外部存储器,SDRAM 和 QSPI Flash,SDRAM 用于帧缓冲器,QSPI Flash 用于存储图片、字体等素材,其图形实现过程如图 1 所示。本文档参考从 TouchGFX Desinger 上下载的 TBS,第一步首先完成 IOC 文件的配置,由于会使用 外部 RAM 和外部 Flash,生成代码后还需要添加相应的存储器驱动代码,以及修改链接文件。对于仅使用内部 Flash 和内部 RAM 的应用,用 STM32CubeMX 和 TouchGFX Desinger 生成代码后,就可以直接使用 TouchGFX 点亮屏幕了。 ; l" z( t' E2 p# @$ `" [
13.png
▲ 图2. 图形实现过程
. E1 s* |' b: h: F: h: U4 J) P5 a
2.1. 新建 IOC 工程
1 Y+ b8 {/ v/ ^5 X- y) O5 l' m1 a- e7 k9 z

2 H. q. y8 i5 D6 j  z" S双击打开 STM32CubeMX 软件,按照图中 1-5 步骤操作,MCU 型号输入 STM32F746NGH6 进行选择,其中第 5 步提示配置默认 MPU 单元来优化内核的推测性 读取访问,请点击“YES”。 1 Q; `9 m& r0 L3 w) Y
14.png
▲ 图3. 新建 STM32CubeMX 工程
然后点击“Project Manager”,配置工程名称,如图所示。
$ w; o& ?9 _: E7 e/ f; i& e) V
15.png
▲ 图4. 配置工程名称
  A4 H- z6 J6 [4 k0 `

, c# B% N# w9 Q1 e. C7 P, W2 G  ]  j2.2. CORTEX_M7 , b2 @1 c- B5 U3 I) H+ a7 U
8 j8 R# r& j6 w: K/ d6 D. ~4 ]7 d% V

/ G1 z& X2 X6 n4 h  O" I这里使能 ICACHE 和 DCACHE,并配置内存保护单元 MPU,要正确配置 MPU 属性 以避免由 Cortex®-M7 推测性读取访问和缓存维护引起的图形性能问题,使用 STM32CubeMX 可以轻松配置 MPU 存储器属性。详细配置过程可以参考 AN4861 4.6 小节 Special recommendations for Cortex-M7 (STM32F7/H7),其中介绍对嵌入了 Cortex®-M7 CPU 的 STM32F7 系列的一些建议,建议大家仔细阅读下。
; `6 T( G- Z2 o( S9 \+ c# S0 K% J' u7 q) o/ D1 W
5 \2 |$ T; [0 l8 X8 Y2 o  L
2.3. CRC 2 J+ M& P* E8 c) S/ B

% m5 ?+ M6 K3 h! {, I* [: Z
, Q2 d* \' J! {" c6 \; U  l8 P
CRC 是循环冗余校验计算单元,如果要使用 TouchGFX,必须要使能 CRC,其配置保 持默认即可。
+ t0 k) W# P* ~# x* I2 }4 e& \, d; O3 r8 e& f
. J7 \( d% W( I; a$ B
16.png
▲ 图5. 使能 CRC

$ f  x& D0 V/ {4 u3 S' J2.4. DMA2D
: `2 O" h/ x1 A( U# C
  @# o& e& k8 I: E$ C

( q4 l; z% j( e/ J& P$ vDMA2D 是 AHB 总线矩阵上的主设备,它将图形数据传输到内存,也可用于图形渲 染,建议使用 DMA2D 来减轻 CPU 负载。DMA2D 使能后保持默认配置即可,当需要 DMA2D 来进行图形加速时,TouchGFX 引擎会自动调用 DMA2D。 3 U& c, s9 C  \+ W

: L# \: |- S% t: N, m0 c* U8 E
17.png
▲ 图6. 使能 DMA2D
4 k* B5 K: ?1 w' w+ O
2.5. FMC 配置 LTDC 帧缓存区和 Video 缓冲区放在了外部 SDRAM 中。配置 FMC 相关参数时,需 要对照原理图和 SDRAM 的 datasheet,了解相关参数,然后进行配置。配置结束后,需 要添加相应的驱动代码,将其配置内存映射模式。
6 l3 [' U0 u* m+ Q1 F3 C
18.png
▲ 图7. FMC 配置
6 [# |+ S& c# j, |8 S

2 i* x* {; c, [1 C9 m2.6. FREERTOS
  D' s& k4 d% W4 K& s! s7 m2 z
- X& l, F3 {3 ^5 @+ C0 k
2 g2 |% F; W( C% I  G4 W
TouchGFX 可以运行在有 RTOS 和无 RTOS 的工程中,本工程移植的是带有 RTOS, RTOS 选择 FreeRTOS,在本工程中新增了 2 个 task,TouchGFXTask 任务用于运行ToucGFX 图形引擎,VideoTask 任务用于进行 Mjpeg 视频的编解码,如果您的项目不用 video 控件,那么 videoTask 可以不用添加。
+ O  k' O+ Z1 n% R/ j
19.png
▲ 图8. FreeRTOS 新增任务

: h8 @8 \/ ~# T( L9 M! }+ e9 k: A
4 g' B, X) b  r
注意新增总的堆空间大小,防止新建任务的栈大小不足。* U; Z1 @6 k6 A% j' T) y2 T

7 c/ i! V( ^( k2 E* k, T- ^9 d
9 v9 o' J3 b& f/ O+ v* O$ k+ l6 S
20.png
▲ 图9. 堆空间大小配置

7 j! x5 [9 p- o8 i, s2.7. GPIO ; Z) d4 ?1 L6 Q4 ~- e9 V
; G3 w; G5 ~  H8 y
1 A, \! a' i) M, x+ E4 ^9 H
在官方下载的 TBS,配置的 GPIO 如图 9 所示。与 LCD 显示相关的引脚有 2 个, LCD_DISP 和 LCD_BL_CTRL。LCD_DISP 用来启用/禁用显示待机模式,需要将 LCD_DISP 配置为高电平来启用显示器,否则显示器将保持待机模式。LCD_BL_CTRL 信 号上的高电平可以点亮背光,而低电平则将其关闭。
9 T& k- O! P4 Y
' W  d2 T5 z2 w2 S' R

9 {" V! l9 ]6 f: Z另外几个 GPIO 引脚可以用来测试性能的,它们的解释说明可以查看 TouchGFXGPIO.cpp 中注释,其中 RENDER_TIME,可以用来查看实际的渲染时间。- e* k, _- C+ R, k# t
$ I. S; o; U- N' p

: v) g/ Y0 j' K3 ~! A/ P1 @, N0 a
21.png
▲ 图10. GPIO 配置

6 s% V* P: E! ^$ a' U2.8. I2C3
' T9 J8 M# I! q6 ^7 {/ ?; Z! E3 I2 {( R$ H* H  O- s; d+ R, s
3 H, [, V. C& P  S
STM32F746G_DISCO 的电容 LCD 的触摸的接口是 I2C3 的 PH7 和 PH8,相关参数 的配置参数如图所示。
) p' u  R' R* r( p+ P' K. x1 P
" A( U9 ]) ?$ H7 T( y
22.png
▲ 图11. I2C3 配置

. B7 j. y$ S- t0 f& S* \' E# |
( Z* ]4 B; b! z3 t
2.9. LIBJPEG
- D. m$ A- i! D9 }1 L+ a/ Q# j+ U) H- F, d& z) S4 l

5 f6 K4 P& V& D1 M如果 TouchGFX 使用 Video 控件,要使能 LIBJPEG,用于视频流的软件编解码。如果 您的工程用不到 Video 控件,那么可以不用使能 LIBJPEG。5 L- v$ ?" p5 e- B

9 a5 s) ^$ O6 [+ Q% F6 @
23.png
▲ 图12. GPIO 配置
3 Y, p8 M* |4 w) s6 f

5 O% _. Y5 Y* X5 J3 R+ G% o2.10. LTDC ) l2 ^$ \) W6 U" V+ @" q' ~
9 g# }2 a8 c+ H9 Y: a
7 J& n% v6 y5 ^  l) D5 P2 L
LTDC 外设主要用来配置 LCD 显示接口,对于 STM32F746G_DISCO 的 LCD 可以参 考下载的 TBS 进行配置。如果是其他型号的 LCD,需要查看 LCD 的屏幕时序表进行配 置。关于 LTDC 的 layer,虽然在 STM32CubeMX 可以配置为 2 个 layers,但是 TouchGFX Designer 是采用 1 个 layer 来做 GUI 开发的,这是因为 2 个 layer 会占用更 多带宽,同时打开 LTDC 全局中断和错误中断。3 k; w( d; A' ]

! d- D; @9 K- ?" M
24.png
▲ 图13. LTDC 参数配置
" [9 J$ `6 J& S$ \5 }' b* x
25.png
▲ 图14. LTDC layer 配置
26.png
▲ 图15. 打开 LTDC 全局中断和错误中断
5 R8 K% @, A1 z7 G3 i3 b& j
+ @7 Q( N6 G# Y& t/ e% I4 z
2.11. QUADSPI 5 }' o2 f. w+ ^& u9 o
当要存储的数据量相对较少时,可以使用内部 FLASH 存储器。否则,应将图形内容放 置在外部存储器中。QUADSPI 外接了一个 128-Mbit Quad-SPI NOR Flash。
' p5 o# k, h6 B1 |5 x. l# b2 s# }- M1 d: X! e
27.png
▲ 图16. QUADSPI 配置
2 ]3 g) N# Z3 Z
% I4 C1 O! C& C* P2 o# b
2.12.SYS 3 j  T  p& n5 K& p
由于 SysTick 被 RTOS 使用,这里 HAL 库的时基选择 TIM6。
- C& d7 o2 M5 e2 G. ]1 T8 ]5 w3 ?( v: y
28.png
▲ 图17. 系统时钟配置

( U* e& H- O: D

+ ~3 \9 ]: X7 Z  j2.13. X-CUBE-TOUCHGFX * W3 x6 @9 H; c" i9 e4 M
Interface:接口选择 Parallel RGB(LTDC)
; t: @+ j0 t- }& P. k对于 RGB 接口的 LCD 来说,通常无内置 GRAM,FrameBuffer Strategy 无法使用 Partial Buffer 策略。在 RAM 足够时,可选择 Double Buffer 策略。存放位置选择 By Allocation。这个可以通过链接文件配置放置在什么位置。9 B6 |/ n' H  n# s6 ]- S2 M1 d
Application Tick Source:应用滴答时钟来源,选择 LTDC,它的实现代码可以在 TouchGFXGeneratedHAL.cpp 中 HAL_LTDC_LineEventCallback 函数找到。
7 ]7 D! Q' n+ o, \9 w  f0 v; @3 [
2 s1 t2 B0 l3 M+ f
29.png
▲ 图18. TouchGFX 配置

2 i( {: L6 T, u& O* V0 ]: c
8 k. D% `. a; Y  \/ W' e; u$ h
2.14.Clock Configuration
' v! i4 b. m+ w" L  C& `系统时钟配置为 216MHz,LTDC 时钟配置为 9.6MHz,这个 LTDC 时钟的配置是参 考 LCD 时序参数表确定的,它与 LCD 的刷新率相关。- {2 U" Z# o# Q

2 u" \. l) ^; ~+ @9 |
30.png
▲ 图19. 时钟树配置

- }1 `+ `0 f2 x' e, X$ K至此,外设配置基本完成,选择所使用的 IDE(这里选择的是 STM32CubeIDE),点 击 Generate Code 按钮,生成代码。然后使用 TouchGFX Designer 打开 TouchGFX 文 件夹下的 ApplicationTemplate.touchgfx.part,在 TouchGFX Designer 中生成 UI 相关 代码。/ @" o7 l/ a0 k- a5 J
3 |! q$ P  y1 m
( y$ J9 j# C& g" Z2 R, X! s' T
37 \& h4 E1 z& S& T3 Z8 V' `' `
添加驱动代码 $ p, y0 ]: R" z( |* l( y# I  ?
对于 LTDC 接口的 TouchGFX 工程,使用 TouchGFX Desiger 生成代码后,如果仅使 用内部 RAM 和 Flash,那么在 TouchGFX 生成代码后,整个软件架构就建好了,可以使 用 TouchGFX 来点亮屏幕了。  P) w2 N; @& v
' e2 u4 n4 U' h* G8 T: r4 E- Z* }
对于使用外部 SDRAM、 QSPI Flash 以及触摸功能的应用可以参考下载的 TBS 进行对 照检查,添加相应的驱动代码和修改链接文件,完善整个工程代码后实现 TouchGFX 点亮 LCD 的效果。
0 @1 @7 j/ Q( m5 m& T
$ k' x' C: Z# v, C3 v2 s

: n2 W3 B0 _8 M% P% K% c  T# D3.1. 添加 SDRAM 驱动代码
' L# n# T6 O5 ^& _查看下载的 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 位来完成,默认情况下该位在复位后使能。! I* ^' H' a% F  Z' d0 a3 ^

6 t6 c) a3 K3 B0 a/ B% F8 \8 v

2 K2 I# Z- S) }, D2 b3 u. q3.2. 添加 QSPI Flash 驱动代码
4 d9 P3 D8 X- s& {3 ?添加驱动代码把 QSPI Flash 配置成 memory mapped 模式。9 V$ X: V- e! o! `6 y+ Q0 p% U

, L) W& R9 W6 U( @# r
0 U6 e! c  h6 `" M6 H
3.3. 添加 Touch 功能
' Y2 G8 {5 C9 S触摸功能在 STM32TouchController.cpp 中实现,具体代码请参考 TBS。3 B4 i+ m/ ?9 t9 s

1 P1 A# X% k# O& O
& Z0 p4 z3 l) |9 k* f3 l. n
3.4. 修改链接文件
6 U4 `! z, H5 B为了把帧缓冲区和视频缓冲放到外部 SDRAM,把字体、图片等素材放到外部 Flash, 需要修改链接文件。不同的 IDE,它的链接文件是不同的。对于 STM32CubeIDE,它的 链接文件是 STM32F746NGHX_FLASH.ld,对于 EWARM,它的链接文件是 stm32f746xx_flash.icf,对于 MDK-ARM,它的链接文件是 STM32F746G_DISCO.sct, 它们的语法略有不同。大家可以参考它的结构进行修改。# b' M0 s. @' _9 f8 ~$ Y& V
( Q. D+ D& s* L4 {, _( ^) @& f  l& @
4 F0 b+ k9 j6 |8 b
4
4 `% \1 @; m& Z- E: a1 S- b* }小结
% K7 B5 W) ^. A1 g. c: C# A/ ], A8 W以上就是 LTDC RGB 接口 LCD 的 TouchGFX 工程的移植步骤,本文档对关键步骤进 行了解释说明,具体细节可参考 AN4861 和官方的 TBS。
% r; p8 p. o" {# r' u3 b$ d9 z" |" c' V% O+ M3 f6 A' T7 T  i" S
& |- q3 a! f+ c3 }
▼▼▼
点击按钮下载《LTDC RGB 接口 LCD TouchGFX 工程的移植步骤》原文档。# J7 f/ r3 [" q: h
点击下载1 {* F/ A, I3 M9 k* H" h
9 v& L2 ~% `: w& x! N% X) x! N) N/ F
收藏 评论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 手机版