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

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

[复制链接]
STMCU-管管 发布时间:2025-2-6 09:47
1; w7 X9 a: T2 Q' e8 z
引言
6 D9 A/ x5 W2 i: I1 P4 i文档基于 STM32F746G_DISCO 硬件平台,参考从 TouchGFX Designer 下载的 STM32F746 的 TBS(TouchGFX Board Setup),讲解 STM32CubeMX 相关配置,介绍了LTDC RGB 接口 LCD 的 TouchGFX 工程的移植步骤。
. D6 ~/ o0 m# J7 \5 l! f; y
12.png
▲ 图1. TouchGFX Designer 中的 STM32F746G_DISCO TBS
3 ^1 x5 x5 ~6 @# {; {. M' H
2 e  q3 R+ _' L; d/ A
2 5 T9 O/ b( w- i5 T+ O4 Y
STM32CubeMX 配置过程
+ v! r. ?3 y2 F) JSTM32F746G_DISCO 有两个外部存储器,SDRAM 和 QSPI Flash,SDRAM 用于帧缓冲器,QSPI Flash 用于存储图片、字体等素材,其图形实现过程如图 1 所示。本文档参考从 TouchGFX Desinger 上下载的 TBS,第一步首先完成 IOC 文件的配置,由于会使用 外部 RAM 和外部 Flash,生成代码后还需要添加相应的存储器驱动代码,以及修改链接文件。对于仅使用内部 Flash 和内部 RAM 的应用,用 STM32CubeMX 和 TouchGFX Desinger 生成代码后,就可以直接使用 TouchGFX 点亮屏幕了。
8 J- I" x; T3 Y' @- S0 S
13.png
▲ 图2. 图形实现过程

0 |) H7 g! V0 D) y2.1. 新建 IOC 工程
2 Q9 C4 n- {. D" N$ u, R2 k" W( k, `/ h+ h. [- a

( U+ h4 u, I  h0 F9 d& L双击打开 STM32CubeMX 软件,按照图中 1-5 步骤操作,MCU 型号输入 STM32F746NGH6 进行选择,其中第 5 步提示配置默认 MPU 单元来优化内核的推测性 读取访问,请点击“YES”。
) \# K& P- X3 M+ [  U- P( W+ D
14.png
▲ 图3. 新建 STM32CubeMX 工程
然后点击“Project Manager”,配置工程名称,如图所示。 0 C+ g  S2 Z- @% s: M
15.png
▲ 图4. 配置工程名称
$ s: x/ H' L# Q+ ^3 O1 z

& J" D+ h7 m. n3 J% G1 b# p2.2. CORTEX_M7 9 i4 W5 S  F* O; p9 P1 V
9 b0 E7 y" Z2 S  \
0 z; F8 B9 P9 K5 {% i! s
这里使能 ICACHE 和 DCACHE,并配置内存保护单元 MPU,要正确配置 MPU 属性 以避免由 Cortex®-M7 推测性读取访问和缓存维护引起的图形性能问题,使用 STM32CubeMX 可以轻松配置 MPU 存储器属性。详细配置过程可以参考 AN4861 4.6 小节 Special recommendations for Cortex-M7 (STM32F7/H7),其中介绍对嵌入了 Cortex®-M7 CPU 的 STM32F7 系列的一些建议,建议大家仔细阅读下。
7 D. L5 c6 o2 v/ V4 M$ X6 |5 ^/ y4 A( h  L

0 T- _/ K; r% E6 z+ k( Y2.3. CRC
6 }5 D8 T; r2 E. c! R* ~8 Y
3 s. {4 @- ?, Q4 r5 U

5 o! g  p/ ~2 W5 Y4 z4 sCRC 是循环冗余校验计算单元,如果要使用 TouchGFX,必须要使能 CRC,其配置保 持默认即可。) P6 S" F+ m' l% g6 v# `* c  ^
. ~4 O) V% d' \/ g/ ?0 r% [1 g

+ p) D9 ]9 v: J8 a$ z9 q
16.png
▲ 图5. 使能 CRC
4 \3 v# `$ w% T$ V- R7 ~2 T
2.4. DMA2D
# V& t3 B( ^2 \, @, Y: [$ C" y+ \$ i$ J( V. v& A
; M5 u  Z+ C: O4 K: }0 V+ k
DMA2D 是 AHB 总线矩阵上的主设备,它将图形数据传输到内存,也可用于图形渲 染,建议使用 DMA2D 来减轻 CPU 负载。DMA2D 使能后保持默认配置即可,当需要 DMA2D 来进行图形加速时,TouchGFX 引擎会自动调用 DMA2D。
. X2 C# G. L, P! Z& J8 E# J  |
( \: A2 n2 m8 M8 V$ \) T
17.png
▲ 图6. 使能 DMA2D
: L8 V% `! h% K; V0 B
2.5. FMC 配置 LTDC 帧缓存区和 Video 缓冲区放在了外部 SDRAM 中。配置 FMC 相关参数时,需 要对照原理图和 SDRAM 的 datasheet,了解相关参数,然后进行配置。配置结束后,需 要添加相应的驱动代码,将其配置内存映射模式。 9 [* p' j+ c' p$ w
18.png
▲ 图7. FMC 配置
' P9 T7 s' O9 W. B6 B  w( Z/ S
- i* U0 P( M0 }9 ~) A- X
2.6. FREERTOS
4 ^. Y" q0 G4 g/ s1 d8 }# B0 }' L; o6 K  E. H* b3 b

3 U& y2 l) ]: R9 x* K/ n2 @- OTouchGFX 可以运行在有 RTOS 和无 RTOS 的工程中,本工程移植的是带有 RTOS, RTOS 选择 FreeRTOS,在本工程中新增了 2 个 task,TouchGFXTask 任务用于运行ToucGFX 图形引擎,VideoTask 任务用于进行 Mjpeg 视频的编解码,如果您的项目不用 video 控件,那么 videoTask 可以不用添加。3 G" x8 K( W0 \$ c
19.png
▲ 图8. FreeRTOS 新增任务
! K" m& g7 i3 z, Y6 G7 X
6 o0 |2 ?9 V; B
注意新增总的堆空间大小,防止新建任务的栈大小不足。$ i- ^% ?- f8 Q
" N5 G7 ^& C% d- _& C6 |0 C7 j

: u; ^: [5 U: d# {/ ?
20.png
▲ 图9. 堆空间大小配置
. E" M9 V( I: E3 X" S; x8 n
2.7. GPIO
3 r; g. \3 U& `
* u: W( ?- Z( u4 }' @1 w4 ^
; |- M: ~7 l! c- l( n7 h( [8 A
在官方下载的 TBS,配置的 GPIO 如图 9 所示。与 LCD 显示相关的引脚有 2 个, LCD_DISP 和 LCD_BL_CTRL。LCD_DISP 用来启用/禁用显示待机模式,需要将 LCD_DISP 配置为高电平来启用显示器,否则显示器将保持待机模式。LCD_BL_CTRL 信 号上的高电平可以点亮背光,而低电平则将其关闭。+ s- E  t" ?* t1 \9 J
* _6 Q1 @" i6 a! w8 V0 r, J

# l4 c: `* z3 H4 S  W2 o8 a另外几个 GPIO 引脚可以用来测试性能的,它们的解释说明可以查看 TouchGFXGPIO.cpp 中注释,其中 RENDER_TIME,可以用来查看实际的渲染时间。7 r' O" _  i6 [7 ?! j
: q  x0 C2 |2 a' ~( v8 ~

9 s5 D: C6 k* d- ~, o  O5 H) a
21.png
▲ 图10. GPIO 配置
  v" u* @+ |) o6 l: J6 B
2.8. I2C3 0 S7 u  y8 ]& h: h  f

/ Y. F6 D  `5 t+ y
6 l, k5 Z; n6 T" W
STM32F746G_DISCO 的电容 LCD 的触摸的接口是 I2C3 的 PH7 和 PH8,相关参数 的配置参数如图所示。
* ?# L' {: N/ p4 ?5 q3 j- ^: m9 A3 b+ Z0 i* u& |1 a* F1 H) z! U
22.png
▲ 图11. I2C3 配置
  w- H3 l$ m- ^. C
( S9 b" T: W2 `% S' l
2.9. LIBJPEG ) O" Q: @6 _1 @2 l; @" I0 j2 R
( m: @0 Z" k5 O6 E
0 R3 t5 y) z  [) ?
如果 TouchGFX 使用 Video 控件,要使能 LIBJPEG,用于视频流的软件编解码。如果 您的工程用不到 Video 控件,那么可以不用使能 LIBJPEG。
. u( d0 W" m) h9 O: g6 S1 V4 y2 a6 K+ }
23.png
▲ 图12. GPIO 配置
5 }* _! Q- a/ k" F- M# l

; w$ u+ O+ s7 I7 m! ~* Z" r2.10. LTDC 6 }6 }( }; n9 ~
. Y4 _2 `1 c; m0 J8 }0 y+ P- f/ J3 A' l

  u- a, O; o5 pLTDC 外设主要用来配置 LCD 显示接口,对于 STM32F746G_DISCO 的 LCD 可以参 考下载的 TBS 进行配置。如果是其他型号的 LCD,需要查看 LCD 的屏幕时序表进行配 置。关于 LTDC 的 layer,虽然在 STM32CubeMX 可以配置为 2 个 layers,但是 TouchGFX Designer 是采用 1 个 layer 来做 GUI 开发的,这是因为 2 个 layer 会占用更 多带宽,同时打开 LTDC 全局中断和错误中断。
- G4 A' g, {# [. K  w6 n6 V
! q' g8 F1 B3 t+ l/ y+ L
24.png
▲ 图13. LTDC 参数配置

& g0 A3 v8 p+ l, k
25.png
▲ 图14. LTDC layer 配置
26.png
▲ 图15. 打开 LTDC 全局中断和错误中断

; R# J1 k  A$ ^" P/ I

3 T4 h) s6 i$ m2.11. QUADSPI
& h# ]3 r1 E/ N3 j' N* @当要存储的数据量相对较少时,可以使用内部 FLASH 存储器。否则,应将图形内容放 置在外部存储器中。QUADSPI 外接了一个 128-Mbit Quad-SPI NOR Flash。
1 v- C. b- a! ^$ r0 r+ d; s9 T. d5 T& U: D+ ~1 A% Q. @# t* K
27.png
▲ 图16. QUADSPI 配置

: _$ ]; G/ x& k% _
) |! U& B3 B% \" \, E0 F% x4 w% p
2.12.SYS , {6 b  U, S2 V! a0 ?% r. j
由于 SysTick 被 RTOS 使用,这里 HAL 库的时基选择 TIM6。! |8 V0 o9 {: z! P3 F8 ~+ |% \
, Q& v6 |% D/ w: ]
28.png
▲ 图17. 系统时钟配置
( @+ Q9 a# C1 |1 l& C) K
7 y8 S' y3 C+ A4 @! B
2.13. X-CUBE-TOUCHGFX
- X# `0 C( w% F) iInterface:接口选择 Parallel RGB(LTDC) " I& r0 h1 a: r* h
对于 RGB 接口的 LCD 来说,通常无内置 GRAM,FrameBuffer Strategy 无法使用 Partial Buffer 策略。在 RAM 足够时,可选择 Double Buffer 策略。存放位置选择 By Allocation。这个可以通过链接文件配置放置在什么位置。
) {( n3 N6 Y; Q+ I. D" WApplication Tick Source:应用滴答时钟来源,选择 LTDC,它的实现代码可以在 TouchGFXGeneratedHAL.cpp 中 HAL_LTDC_LineEventCallback 函数找到。6 r; V' Q; F$ U3 q- Z* _/ i

# @3 }# p/ g2 V  A0 M4 m
29.png
▲ 图18. TouchGFX 配置
7 f+ a0 g5 v9 o

5 W0 a, z) y0 V. ^& O) l' S9 j3 ?; `2.14.Clock Configuration * k* p9 t+ N$ m
系统时钟配置为 216MHz,LTDC 时钟配置为 9.6MHz,这个 LTDC 时钟的配置是参 考 LCD 时序参数表确定的,它与 LCD 的刷新率相关。
. g# Q, L' f, p1 ^8 |) t2 Q+ ^) F- g0 w( {! [! z
30.png
▲ 图19. 时钟树配置

: ]: a5 ]+ @4 M2 `% h至此,外设配置基本完成,选择所使用的 IDE(这里选择的是 STM32CubeIDE),点 击 Generate Code 按钮,生成代码。然后使用 TouchGFX Designer 打开 TouchGFX 文 件夹下的 ApplicationTemplate.touchgfx.part,在 TouchGFX Designer 中生成 UI 相关 代码。) c, [. T* A- t) E% c; O' ^

1 v0 Z' |& z% X/ C! u( O, S4 b# `
. I# O$ O2 t/ t7 I" ]: r
39 l$ L( C* u3 K5 j+ S$ G; [
添加驱动代码 . Q# Z3 H: O, J  J! ^2 @) k( T
对于 LTDC 接口的 TouchGFX 工程,使用 TouchGFX Desiger 生成代码后,如果仅使 用内部 RAM 和 Flash,那么在 TouchGFX 生成代码后,整个软件架构就建好了,可以使 用 TouchGFX 来点亮屏幕了。7 _! ^; d7 \8 v- u  t& l
6 v1 M' D7 e+ b: m5 o9 X1 Z3 ^
对于使用外部 SDRAM、 QSPI Flash 以及触摸功能的应用可以参考下载的 TBS 进行对 照检查,添加相应的驱动代码和修改链接文件,完善整个工程代码后实现 TouchGFX 点亮 LCD 的效果。
: V; w/ i1 A" M' M. O4 U0 u0 J" e  v, ]% h. L  R& ~
* z$ L) I! X' Z( d/ x
3.1. 添加 SDRAM 驱动代码+ ~7 s4 |2 X+ f/ y/ d, k  Q
查看下载的 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 位来完成,默认情况下该位在复位后使能。
3 A2 i+ ?) Z* F4 O3 V' U( S+ @" o+ _

& u2 |; a8 t1 H  u: o3.2. 添加 QSPI Flash 驱动代码 & u; \/ Z: h7 X5 p1 Q% h0 `! O
添加驱动代码把 QSPI Flash 配置成 memory mapped 模式。
& H" ]9 B3 f+ T0 R3 U1 W, a. B0 P3 U1 z, U* U; I# M  |" W* h+ S3 @0 y

( Q, D0 n6 n+ v' A2 ^3.3. 添加 Touch 功能 6 g# W% b* n* I' C! d
触摸功能在 STM32TouchController.cpp 中实现,具体代码请参考 TBS。  v% ]7 d7 j6 p* Y* y
" N1 b# z7 B% I- J
% R1 \) o$ u  o* Z; d, ^5 m
3.4. 修改链接文件
/ U% E' e% I) {( D为了把帧缓冲区和视频缓冲放到外部 SDRAM,把字体、图片等素材放到外部 Flash, 需要修改链接文件。不同的 IDE,它的链接文件是不同的。对于 STM32CubeIDE,它的 链接文件是 STM32F746NGHX_FLASH.ld,对于 EWARM,它的链接文件是 stm32f746xx_flash.icf,对于 MDK-ARM,它的链接文件是 STM32F746G_DISCO.sct, 它们的语法略有不同。大家可以参考它的结构进行修改。
9 K: [& {. X7 T  h3 ^, ]9 k
9 Q' N4 n0 Z" a* k! }7 t1 K" M5 p' n

( C/ U* y# u: ~$ Z4
2 V/ d  O. p: @+ X9 C5 Z. V* a! n小结
3 U2 O" g. I- J) s以上就是 LTDC RGB 接口 LCD 的 TouchGFX 工程的移植步骤,本文档对关键步骤进 行了解释说明,具体细节可参考 AN4861 和官方的 TBS。
4 i/ n" B+ p2 W5 n% ^
- @( I$ a# Y( x; L3 }
' l7 P5 _  h2 W1 ?# Y, v
▼▼▼
点击按钮下载《LTDC RGB 接口 LCD TouchGFX 工程的移植步骤》原文档。
0 O4 ]6 V1 @3 C0 S点击下载
+ A5 p# H: g& J  s9 a8 b6 T' l& V8 {
收藏 评论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 手机版