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

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

[复制链接]
STMCU-管管 发布时间:2025-2-6 09:47
1
' }; m4 F4 S+ g3 j- n9 y引言( Z1 u' v. t/ ?
文档基于 STM32F746G_DISCO 硬件平台,参考从 TouchGFX Designer 下载的 STM32F746 的 TBS(TouchGFX Board Setup),讲解 STM32CubeMX 相关配置,介绍了LTDC RGB 接口 LCD 的 TouchGFX 工程的移植步骤。 . s1 U# \$ h3 ^1 X# Y
12.png
▲ 图1. TouchGFX Designer 中的 STM32F746G_DISCO TBS
2 e! x  C8 Z' ]9 f
: g* f$ K7 A- P# \+ i1 ^
2 - W! z% {* G* S
STM32CubeMX 配置过程 5 @1 z  _( p8 h  z" I4 j- o
STM32F746G_DISCO 有两个外部存储器,SDRAM 和 QSPI Flash,SDRAM 用于帧缓冲器,QSPI Flash 用于存储图片、字体等素材,其图形实现过程如图 1 所示。本文档参考从 TouchGFX Desinger 上下载的 TBS,第一步首先完成 IOC 文件的配置,由于会使用 外部 RAM 和外部 Flash,生成代码后还需要添加相应的存储器驱动代码,以及修改链接文件。对于仅使用内部 Flash 和内部 RAM 的应用,用 STM32CubeMX 和 TouchGFX Desinger 生成代码后,就可以直接使用 TouchGFX 点亮屏幕了。 7 K0 a8 _3 p9 r5 x, }
13.png
▲ 图2. 图形实现过程

7 V% D  A* l& s( i2.1. 新建 IOC 工程 : H' @/ B* x' D0 R, o  i, }+ g
9 ~7 A( V8 n8 @, O. H, F
/ a- ^- M3 ^( C0 ~( }& O- c
双击打开 STM32CubeMX 软件,按照图中 1-5 步骤操作,MCU 型号输入 STM32F746NGH6 进行选择,其中第 5 步提示配置默认 MPU 单元来优化内核的推测性 读取访问,请点击“YES”。 ) ~. i8 g+ j' Y- S
14.png
▲ 图3. 新建 STM32CubeMX 工程
然后点击“Project Manager”,配置工程名称,如图所示。 8 P" D5 i3 O0 @' q6 g# [0 t" A
15.png
▲ 图4. 配置工程名称
+ p! x/ B8 X( Q) b: c2 M- C3 S( R2 T  O$ i

* @; L* b  d) a0 L2.2. CORTEX_M7 / v# J$ n* y- A* B) ~& p0 D7 u
* s0 s8 K4 L% C8 b( R. r

; p9 F  w. F. _# D) w% H. Z6 n这里使能 ICACHE 和 DCACHE,并配置内存保护单元 MPU,要正确配置 MPU 属性 以避免由 Cortex®-M7 推测性读取访问和缓存维护引起的图形性能问题,使用 STM32CubeMX 可以轻松配置 MPU 存储器属性。详细配置过程可以参考 AN4861 4.6 小节 Special recommendations for Cortex-M7 (STM32F7/H7),其中介绍对嵌入了 Cortex®-M7 CPU 的 STM32F7 系列的一些建议,建议大家仔细阅读下。0 O4 V7 V& |6 @" H# s
6 n" f5 E) P: l' H0 n2 X

7 t, M; Z  h2 {% _" p! f. \2.3. CRC ( l( M- U/ N# T7 [3 h8 {# c
2 t+ U% }" i% P: J5 g
9 t9 t4 P9 N1 m7 y; A
CRC 是循环冗余校验计算单元,如果要使用 TouchGFX,必须要使能 CRC,其配置保 持默认即可。( z' d" P: g2 X2 a: e
/ A  C5 k  z, I% R8 |
7 |6 Q' @) F- t& R6 G5 O0 I
16.png
▲ 图5. 使能 CRC

. u' ]2 M  n' L' u7 ?( |2.4. DMA2D
5 p/ U' s& E4 L
6 m0 R9 S7 \) a7 z" d
+ C0 Z" o/ o, |
DMA2D 是 AHB 总线矩阵上的主设备,它将图形数据传输到内存,也可用于图形渲 染,建议使用 DMA2D 来减轻 CPU 负载。DMA2D 使能后保持默认配置即可,当需要 DMA2D 来进行图形加速时,TouchGFX 引擎会自动调用 DMA2D。
4 K" Q! X) p3 P7 b9 c
: A" o. X) N% V7 j( B
17.png
▲ 图6. 使能 DMA2D

$ ?9 a: Y5 p. T. c2.5. FMC 配置 LTDC 帧缓存区和 Video 缓冲区放在了外部 SDRAM 中。配置 FMC 相关参数时,需 要对照原理图和 SDRAM 的 datasheet,了解相关参数,然后进行配置。配置结束后,需 要添加相应的驱动代码,将其配置内存映射模式。 , L9 t$ ^/ P: U- q' H6 p" E
18.png
▲ 图7. FMC 配置

6 f5 @6 B( N8 y  w

* \$ P2 p7 ?% i8 i$ ]2.6. FREERTOS
7 z6 l7 ]- _7 F. O5 ?1 C, d5 ]
5 G8 B1 A8 L3 r
4 [8 P2 q9 t/ x. t
TouchGFX 可以运行在有 RTOS 和无 RTOS 的工程中,本工程移植的是带有 RTOS, RTOS 选择 FreeRTOS,在本工程中新增了 2 个 task,TouchGFXTask 任务用于运行ToucGFX 图形引擎,VideoTask 任务用于进行 Mjpeg 视频的编解码,如果您的项目不用 video 控件,那么 videoTask 可以不用添加。: j8 m. T) {' }( z! j- g( }
19.png
▲ 图8. FreeRTOS 新增任务
* T5 y5 t! V; H# \4 h* x3 \. K

# {1 K( a/ s* z注意新增总的堆空间大小,防止新建任务的栈大小不足。
3 b' P* ]5 G2 G! o( g1 b/ k& L$ K/ e3 B; r8 [" D  F% K$ D
- N  d% T6 n% Z, ~1 A
20.png
▲ 图9. 堆空间大小配置
* `' v1 O3 V7 Q9 b6 M& H
2.7. GPIO
# C0 A- m3 m9 x. Z; k. r
" B0 I* h4 t/ G$ g' b0 y$ g' e% G6 }

/ Y* _9 t2 Z; c/ z/ X& `在官方下载的 TBS,配置的 GPIO 如图 9 所示。与 LCD 显示相关的引脚有 2 个, LCD_DISP 和 LCD_BL_CTRL。LCD_DISP 用来启用/禁用显示待机模式,需要将 LCD_DISP 配置为高电平来启用显示器,否则显示器将保持待机模式。LCD_BL_CTRL 信 号上的高电平可以点亮背光,而低电平则将其关闭。9 e' @  V1 ^9 o  C

" f/ \( Q7 K7 s1 t

- H- X6 I0 E# x/ y另外几个 GPIO 引脚可以用来测试性能的,它们的解释说明可以查看 TouchGFXGPIO.cpp 中注释,其中 RENDER_TIME,可以用来查看实际的渲染时间。% w0 @" ]* Q- E4 V  L' y9 G8 ~
5 s) q. |0 A. E: N$ N

$ F4 o9 e, `0 A6 c( e0 O' F& x
21.png
▲ 图10. GPIO 配置

( J6 s/ X& z$ e0 A8 j2.8. I2C3
0 A, I  y* x  V7 D- r9 E' z, @+ \0 f' ^) o5 o
; P! ~) i3 h" l) C
STM32F746G_DISCO 的电容 LCD 的触摸的接口是 I2C3 的 PH7 和 PH8,相关参数 的配置参数如图所示。
; u0 [' }9 F7 Z$ g( f. o. `! `  I- ?
+ S- E# J3 _$ ~: z. |# c9 U
22.png
▲ 图11. I2C3 配置
. W& V+ e. r, A# U7 Z3 w* D
- h9 e6 C1 m) N+ ^
2.9. LIBJPEG
( M5 L! ]# R$ R, }4 W; G( W% y0 W: h9 [5 R9 n

/ K5 t, F, B, y! o6 V如果 TouchGFX 使用 Video 控件,要使能 LIBJPEG,用于视频流的软件编解码。如果 您的工程用不到 Video 控件,那么可以不用使能 LIBJPEG。' [+ ~0 g& R3 v) {! i+ I' M

7 S7 T2 H3 J6 x
23.png
▲ 图12. GPIO 配置
3 \' n. ]' m5 b& s
/ r* c$ g& ?* ], e" N7 U% t. N
2.10. LTDC % ?% T" c2 b) @# k( I; N
3 t( L  X! I' u5 p; Y2 m$ z" j

) Z$ ~, `. l  B: R" J  p, @LTDC 外设主要用来配置 LCD 显示接口,对于 STM32F746G_DISCO 的 LCD 可以参 考下载的 TBS 进行配置。如果是其他型号的 LCD,需要查看 LCD 的屏幕时序表进行配 置。关于 LTDC 的 layer,虽然在 STM32CubeMX 可以配置为 2 个 layers,但是 TouchGFX Designer 是采用 1 个 layer 来做 GUI 开发的,这是因为 2 个 layer 会占用更 多带宽,同时打开 LTDC 全局中断和错误中断。
8 }: P+ q# _6 A% O' J
* \+ Z% k; A  u1 S5 X; ~
24.png
▲ 图13. LTDC 参数配置

+ K3 }- t2 S* t  U, y- \4 j' U: i
25.png
▲ 图14. LTDC layer 配置
26.png
▲ 图15. 打开 LTDC 全局中断和错误中断

0 F: c6 M5 E: `7 G6 a! F

6 r& }5 `) u6 S5 w  H6 T# y! M2.11. QUADSPI ; P* L- ^" Z$ }! ]- h
当要存储的数据量相对较少时,可以使用内部 FLASH 存储器。否则,应将图形内容放 置在外部存储器中。QUADSPI 外接了一个 128-Mbit Quad-SPI NOR Flash。
: I+ V  ]& C& P' t/ {$ Y
" m) @# l$ W9 s# w& V5 j
27.png
▲ 图16. QUADSPI 配置
( J$ |) a7 |9 r. ~3 }% |4 z
  _+ ]% c; }4 q2 o  N, a* T" F2 C
2.12.SYS
1 Z: g, T! H) F; K* ]  A由于 SysTick 被 RTOS 使用,这里 HAL 库的时基选择 TIM6。
# ^) `0 N) G$ h& C
0 q+ Q% X+ z1 [/ l, F. l) x
28.png
▲ 图17. 系统时钟配置

* H- Y3 {# ^. a. ]
, W& F& a4 J, C$ G9 }
2.13. X-CUBE-TOUCHGFX 4 @2 i1 D9 C' }
Interface:接口选择 Parallel RGB(LTDC) $ T* z. m" ~, \  O
对于 RGB 接口的 LCD 来说,通常无内置 GRAM,FrameBuffer Strategy 无法使用 Partial Buffer 策略。在 RAM 足够时,可选择 Double Buffer 策略。存放位置选择 By Allocation。这个可以通过链接文件配置放置在什么位置。- E( y( L2 M3 w% z/ S1 }6 w6 c. V
Application Tick Source:应用滴答时钟来源,选择 LTDC,它的实现代码可以在 TouchGFXGeneratedHAL.cpp 中 HAL_LTDC_LineEventCallback 函数找到。0 D5 \& l/ y! o) Z# I1 \3 R. R  c

& \7 J( f3 c2 G- J
29.png
▲ 图18. TouchGFX 配置
" R5 D! \4 {( j1 V6 f, y" |  c0 P$ B- ^) }
1 w: q1 T: z4 u8 {
2.14.Clock Configuration
7 s6 p/ N: [4 b# T! D系统时钟配置为 216MHz,LTDC 时钟配置为 9.6MHz,这个 LTDC 时钟的配置是参 考 LCD 时序参数表确定的,它与 LCD 的刷新率相关。* o, V1 G: D) x/ q) r$ k# V
0 G# s. ^0 O) P# U. d' M) ?3 L: [
30.png
▲ 图19. 时钟树配置
( D0 A" [. [4 X: m* m$ u
至此,外设配置基本完成,选择所使用的 IDE(这里选择的是 STM32CubeIDE),点 击 Generate Code 按钮,生成代码。然后使用 TouchGFX Designer 打开 TouchGFX 文 件夹下的 ApplicationTemplate.touchgfx.part,在 TouchGFX Designer 中生成 UI 相关 代码。$ {: L) Z% j4 v6 j9 S( O

9 C* Q* w6 ]; @( c
, t5 x! m# h& u& O3 R+ E* u: _# C
3$ `3 x5 \6 }  k- `% X9 e8 N
添加驱动代码
  T. g: L% @0 z) N对于 LTDC 接口的 TouchGFX 工程,使用 TouchGFX Desiger 生成代码后,如果仅使 用内部 RAM 和 Flash,那么在 TouchGFX 生成代码后,整个软件架构就建好了,可以使 用 TouchGFX 来点亮屏幕了。8 B$ W7 f( J+ j2 w) Q( ~

% `3 j& r' ]# ^8 @对于使用外部 SDRAM、 QSPI Flash 以及触摸功能的应用可以参考下载的 TBS 进行对 照检查,添加相应的驱动代码和修改链接文件,完善整个工程代码后实现 TouchGFX 点亮 LCD 的效果。( I+ c/ }, C+ ?8 {: v+ P; F
  ^) W4 U( Y1 w. ]& T% f2 g& z
% M* V+ b$ ?. @8 Y$ L: h2 e9 H
3.1. 添加 SDRAM 驱动代码
3 v( g: S' Y; a/ n( Q* N& l查看下载的 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 位来完成,默认情况下该位在复位后使能。
7 L" C$ Z: Q8 Q: c/ s* O1 n* }/ G  h0 h) P- \9 K* o  ]9 p  s, F
4 w- L; h1 z* ^/ U+ _$ k% b5 Y
3.2. 添加 QSPI Flash 驱动代码
7 |  P) I) T3 i, {- R添加驱动代码把 QSPI Flash 配置成 memory mapped 模式。+ |% ?+ J3 ^, v/ l+ U& @: Q1 c  [- ~2 t
! X) z: g0 T0 u* |
$ z2 Y+ C) {: W# \- k
3.3. 添加 Touch 功能 , V+ _3 w5 ?5 F$ a: `4 N
触摸功能在 STM32TouchController.cpp 中实现,具体代码请参考 TBS。
- t- ]! \/ v) m2 g! f& j
6 O/ ^" |# D% k

6 `# w+ n. ^; P3.4. 修改链接文件
4 f6 [$ h  u9 z, D( m为了把帧缓冲区和视频缓冲放到外部 SDRAM,把字体、图片等素材放到外部 Flash, 需要修改链接文件。不同的 IDE,它的链接文件是不同的。对于 STM32CubeIDE,它的 链接文件是 STM32F746NGHX_FLASH.ld,对于 EWARM,它的链接文件是 stm32f746xx_flash.icf,对于 MDK-ARM,它的链接文件是 STM32F746G_DISCO.sct, 它们的语法略有不同。大家可以参考它的结构进行修改。6 O/ l* N8 R1 h
- T- b( ?1 e: r6 _
( u; h0 H' k7 }+ x, N. X
4  t; r* ]1 v: ?( @6 d
小结
4 C+ K3 h6 D  N3 ^0 E3 X* t# p以上就是 LTDC RGB 接口 LCD 的 TouchGFX 工程的移植步骤,本文档对关键步骤进 行了解释说明,具体细节可参考 AN4861 和官方的 TBS。2 x! {& J8 S! J% K- {; h

. ]3 Z" ^7 f7 Q; g4 I0 k) Z2 W) S8 l

* i! a3 |. ?5 |+ ~3 S' x
▼▼▼
点击按钮下载《LTDC RGB 接口 LCD TouchGFX 工程的移植步骤》原文档。
/ _( p5 e& |2 h8 j9 Q  ]- z点击下载% }0 O4 `9 v+ O& A+ x8 x. T2 |

+ G, N4 O5 m" N# I
收藏 评论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 手机版