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

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

[复制链接]
STMCU-管管 发布时间:2025-2-6 09:47
1
: }0 X3 H: m+ L  n  ~5 ?; c引言
* [, G9 L0 @. W文档基于 STM32F746G_DISCO 硬件平台,参考从 TouchGFX Designer 下载的 STM32F746 的 TBS(TouchGFX Board Setup),讲解 STM32CubeMX 相关配置,介绍了LTDC RGB 接口 LCD 的 TouchGFX 工程的移植步骤。
, M7 c6 e# d5 E
12.png
▲ 图1. TouchGFX Designer 中的 STM32F746G_DISCO TBS

5 i0 E& O4 f/ t) [2 J2 B' P
- U) X: B2 W- q; d( e5 V/ V
2 6 T8 f" w& |/ F1 d: I! i/ {
STM32CubeMX 配置过程
6 v1 d5 a3 e1 t1 ^! }, N* ~STM32F746G_DISCO 有两个外部存储器,SDRAM 和 QSPI Flash,SDRAM 用于帧缓冲器,QSPI Flash 用于存储图片、字体等素材,其图形实现过程如图 1 所示。本文档参考从 TouchGFX Desinger 上下载的 TBS,第一步首先完成 IOC 文件的配置,由于会使用 外部 RAM 和外部 Flash,生成代码后还需要添加相应的存储器驱动代码,以及修改链接文件。对于仅使用内部 Flash 和内部 RAM 的应用,用 STM32CubeMX 和 TouchGFX Desinger 生成代码后,就可以直接使用 TouchGFX 点亮屏幕了。
- V# a7 \/ S! q( X4 _9 A* e% }7 B
13.png
▲ 图2. 图形实现过程

- C; e, e, o2 a0 L" L6 b* j' c# ~2.1. 新建 IOC 工程 6 a/ C; \; e4 l# K. z  W* e
5 U% ?( H" z2 T1 l
& Q- n  T9 w" W" U- O2 N7 d
双击打开 STM32CubeMX 软件,按照图中 1-5 步骤操作,MCU 型号输入 STM32F746NGH6 进行选择,其中第 5 步提示配置默认 MPU 单元来优化内核的推测性 读取访问,请点击“YES”。
$ G$ q/ n; f7 V# f  E( [
14.png
▲ 图3. 新建 STM32CubeMX 工程
然后点击“Project Manager”,配置工程名称,如图所示。
- k; o( f9 G0 v  p9 I
15.png
▲ 图4. 配置工程名称

5 q( J$ L, ^* F; o

6 ^# B0 ^2 `! f2 D/ G2.2. CORTEX_M7 - S, K$ t4 |/ T. A
9 Z9 i% [' h) @/ E" `5 D$ j. T7 |
0 i4 W* A* D8 Q( j/ f: ~" G- i' [) {
这里使能 ICACHE 和 DCACHE,并配置内存保护单元 MPU,要正确配置 MPU 属性 以避免由 Cortex®-M7 推测性读取访问和缓存维护引起的图形性能问题,使用 STM32CubeMX 可以轻松配置 MPU 存储器属性。详细配置过程可以参考 AN4861 4.6 小节 Special recommendations for Cortex-M7 (STM32F7/H7),其中介绍对嵌入了 Cortex®-M7 CPU 的 STM32F7 系列的一些建议,建议大家仔细阅读下。& o8 o5 S6 Q9 u8 B" P# O& @! r
9 r$ ?7 n, E, l  y

- [' }9 z. ]+ r0 {9 n/ u. y2.3. CRC 6 ]! m8 v8 Q$ b% I% j* \  a
2 [9 F) S8 E, s$ \# g- ?, q: `+ q

2 m4 g% {3 `+ N. a- U& ACRC 是循环冗余校验计算单元,如果要使用 TouchGFX,必须要使能 CRC,其配置保 持默认即可。
$ q. O# H. O  U6 p5 n3 n0 t9 S% W0 I/ t

% ~) r4 I9 C2 v
16.png
▲ 图5. 使能 CRC
  o& I2 |  _. A
2.4. DMA2D
9 m4 x: p  h0 b* P, Z6 t
9 P8 `; k4 F4 Z+ c0 |$ C: D
& K/ \" i* O. u+ F1 Q* m+ B
DMA2D 是 AHB 总线矩阵上的主设备,它将图形数据传输到内存,也可用于图形渲 染,建议使用 DMA2D 来减轻 CPU 负载。DMA2D 使能后保持默认配置即可,当需要 DMA2D 来进行图形加速时,TouchGFX 引擎会自动调用 DMA2D。
1 M0 G% X/ g* j5 W9 }5 D1 |) o4 V8 S# q5 s. i4 W5 t+ {
17.png
▲ 图6. 使能 DMA2D
2 |5 \  z; ]6 W" s. m8 I
2.5. FMC 配置 LTDC 帧缓存区和 Video 缓冲区放在了外部 SDRAM 中。配置 FMC 相关参数时,需 要对照原理图和 SDRAM 的 datasheet,了解相关参数,然后进行配置。配置结束后,需 要添加相应的驱动代码,将其配置内存映射模式。 7 @7 x- g' ]$ @$ X# l( o1 D
18.png
▲ 图7. FMC 配置
( s+ a, E9 S) T" C& @
2 a, X; @- }: {6 C/ [' e
2.6. FREERTOS
" @# Z1 B: Q& ~; K, q( b0 T, T& j/ {
- ~2 L+ ^2 ~4 U( w& J! q
$ z+ |8 S* Z) y! O1 d" b6 d
TouchGFX 可以运行在有 RTOS 和无 RTOS 的工程中,本工程移植的是带有 RTOS, RTOS 选择 FreeRTOS,在本工程中新增了 2 个 task,TouchGFXTask 任务用于运行ToucGFX 图形引擎,VideoTask 任务用于进行 Mjpeg 视频的编解码,如果您的项目不用 video 控件,那么 videoTask 可以不用添加。
! l2 l, a' v( g; r! ^; A$ Y
19.png
▲ 图8. FreeRTOS 新增任务
( u' l& L' f4 d" P

- A* Y- {& d- x1 a: C注意新增总的堆空间大小,防止新建任务的栈大小不足。
4 X) E7 \& b3 l; m$ M' c" R
# ~! A: E- m( b/ B" C+ b* p5 [0 x

9 a. p, s3 i* w4 d9 r
20.png
▲ 图9. 堆空间大小配置
  M( Y5 w# S1 K, ?
2.7. GPIO & y8 h( ]/ _2 X

. A  B( |8 o4 w( d8 |
1 U: e% Z& w' x  g) P& c+ D0 e
在官方下载的 TBS,配置的 GPIO 如图 9 所示。与 LCD 显示相关的引脚有 2 个, LCD_DISP 和 LCD_BL_CTRL。LCD_DISP 用来启用/禁用显示待机模式,需要将 LCD_DISP 配置为高电平来启用显示器,否则显示器将保持待机模式。LCD_BL_CTRL 信 号上的高电平可以点亮背光,而低电平则将其关闭。& f+ m/ j+ S, {% L" B3 g# n! m
- y5 Z$ B% s  p
. u  S, i; W* V1 P% Z6 }. ?
另外几个 GPIO 引脚可以用来测试性能的,它们的解释说明可以查看 TouchGFXGPIO.cpp 中注释,其中 RENDER_TIME,可以用来查看实际的渲染时间。+ F9 X  F* S1 L) M2 |
' C9 l" L# j% j8 K: S

6 N% M- i- e" N, `* o$ e$ _6 G! L
21.png
▲ 图10. GPIO 配置
4 X, R1 K% t/ |. j; f/ F2 s3 k; J
2.8. I2C3 . J& v2 ]/ o2 K% X5 I1 ?% D9 }: D' c

9 c! h/ z3 Z8 {) Q, C

* R: _+ a/ Q0 P: w7 T) I1 ?6 iSTM32F746G_DISCO 的电容 LCD 的触摸的接口是 I2C3 的 PH7 和 PH8,相关参数 的配置参数如图所示。5 `! ^0 O  S* O: ^, Z

5 L- m5 R6 K, y
22.png
▲ 图11. I2C3 配置

, f' T) y2 [8 `* F3 _
: U( ?2 t5 r+ g1 R5 a6 y& H8 l
2.9. LIBJPEG 8 K) \9 @0 f* F  Z
& q& H1 R7 q$ b9 D+ \  D* W- r; y
" C' T4 q) ]6 u7 C+ |
如果 TouchGFX 使用 Video 控件,要使能 LIBJPEG,用于视频流的软件编解码。如果 您的工程用不到 Video 控件,那么可以不用使能 LIBJPEG。
: ?7 {3 x* y- Z. Y9 d
5 n6 L$ m8 R$ V* f/ B8 ~
23.png
▲ 图12. GPIO 配置

- f" G( U* C9 D) E! H1 ^3 M2 x

: \* c) _& W- |- M& c& S2.10. LTDC
2 F. j" y7 \! `4 r4 N! C0 d; H; `8 @! E' h1 c1 V
2 \9 C! @2 r7 h- A
LTDC 外设主要用来配置 LCD 显示接口,对于 STM32F746G_DISCO 的 LCD 可以参 考下载的 TBS 进行配置。如果是其他型号的 LCD,需要查看 LCD 的屏幕时序表进行配 置。关于 LTDC 的 layer,虽然在 STM32CubeMX 可以配置为 2 个 layers,但是 TouchGFX Designer 是采用 1 个 layer 来做 GUI 开发的,这是因为 2 个 layer 会占用更 多带宽,同时打开 LTDC 全局中断和错误中断。
3 T2 H- H# ~/ w" n
- M3 M7 _0 I2 k1 V! p3 _
24.png
▲ 图13. LTDC 参数配置

( K. y. j; O" p, A
25.png
▲ 图14. LTDC layer 配置
26.png
▲ 图15. 打开 LTDC 全局中断和错误中断

! n/ L  O) _) I2 v. ~$ \

# u) S! W) |1 y3 W$ t( l! H. ^+ p2.11. QUADSPI 1 q2 G  j" g  z/ T1 N" H- S" X! J
当要存储的数据量相对较少时,可以使用内部 FLASH 存储器。否则,应将图形内容放 置在外部存储器中。QUADSPI 外接了一个 128-Mbit Quad-SPI NOR Flash。3 R& Q8 ~9 y/ g2 `6 B& m
9 T1 ?  S. Q8 _3 w! @! V. S# Q) |4 T9 [
27.png
▲ 图16. QUADSPI 配置

' v+ v* @7 @! n8 q

  N8 v  }: T1 n  n4 f, c2.12.SYS 5 ]" G' O5 N6 M9 }
由于 SysTick 被 RTOS 使用,这里 HAL 库的时基选择 TIM6。
& P& R, y5 {) n) |6 m) N
) }7 o% d6 _4 ?! p# ~  X* _. _# v9 S- {" a
28.png
▲ 图17. 系统时钟配置
; x5 `  O1 q2 w+ N

( g& }! ]6 x* O6 s8 V2.13. X-CUBE-TOUCHGFX
" h# U# x0 [+ h1 H8 u, DInterface:接口选择 Parallel RGB(LTDC)
) l8 n1 ^5 m' u3 c3 R对于 RGB 接口的 LCD 来说,通常无内置 GRAM,FrameBuffer Strategy 无法使用 Partial Buffer 策略。在 RAM 足够时,可选择 Double Buffer 策略。存放位置选择 By Allocation。这个可以通过链接文件配置放置在什么位置。
( O8 a. I3 W7 W. s; v! s+ MApplication Tick Source:应用滴答时钟来源,选择 LTDC,它的实现代码可以在 TouchGFXGeneratedHAL.cpp 中 HAL_LTDC_LineEventCallback 函数找到。
% u# p8 K3 N  Y8 |7 v" |% H' Y1 H* p- f! r: O8 n
29.png
▲ 图18. TouchGFX 配置

, }! N7 L; R" t& C6 l5 Z
/ m+ A: T) H: |
2.14.Clock Configuration
: A2 }0 `5 |+ A% T系统时钟配置为 216MHz,LTDC 时钟配置为 9.6MHz,这个 LTDC 时钟的配置是参 考 LCD 时序参数表确定的,它与 LCD 的刷新率相关。2 \5 n$ Y$ b2 j1 {( h1 @
1 ]9 j8 C. {% W+ j# W3 b* t
30.png
▲ 图19. 时钟树配置
: J# X# d% d! p) \, S6 e
至此,外设配置基本完成,选择所使用的 IDE(这里选择的是 STM32CubeIDE),点 击 Generate Code 按钮,生成代码。然后使用 TouchGFX Designer 打开 TouchGFX 文 件夹下的 ApplicationTemplate.touchgfx.part,在 TouchGFX Designer 中生成 UI 相关 代码。4 l, A. K% s. ~4 H5 @
/ C5 @- w, O5 |1 z1 y! G) s
3 H3 }. s5 U( W
3
7 K* Y3 r) g- O4 n$ X: x添加驱动代码 ' }4 _+ N6 ?% `9 h' K" q
对于 LTDC 接口的 TouchGFX 工程,使用 TouchGFX Desiger 生成代码后,如果仅使 用内部 RAM 和 Flash,那么在 TouchGFX 生成代码后,整个软件架构就建好了,可以使 用 TouchGFX 来点亮屏幕了。
1 V. T  J6 v9 e1 l; L8 e2 p9 H- J3 T1 i5 c/ ?; d
对于使用外部 SDRAM、 QSPI Flash 以及触摸功能的应用可以参考下载的 TBS 进行对 照检查,添加相应的驱动代码和修改链接文件,完善整个工程代码后实现 TouchGFX 点亮 LCD 的效果。" _  C; g2 x7 i- O. n2 N

1 N4 z/ t( M* ~& I
3 a+ R. U* a$ s; x0 n9 p1 c
3.1. 添加 SDRAM 驱动代码
' A3 g3 c( ~: ]2 Y2 d; I, N! V) }查看下载的 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 位来完成,默认情况下该位在复位后使能。  @. D8 x* _( V* D" B5 g
* y6 D5 L2 D& S, x" q
& C5 y& d5 Z2 \+ c* l! |% [- ^
3.2. 添加 QSPI Flash 驱动代码 ( s6 v# g7 d# i% ]! f0 P/ C9 |
添加驱动代码把 QSPI Flash 配置成 memory mapped 模式。0 Y- o# a3 q6 o' f8 g% U7 A# R
- T* \9 e7 S, k# [  n$ Q$ s

3 t0 g1 }: H# J, T3.3. 添加 Touch 功能
% b& b, @4 K' B# u$ J/ I触摸功能在 STM32TouchController.cpp 中实现,具体代码请参考 TBS。
# Q1 s6 d, l- W* x. c( L1 H- U5 u$ n8 t+ H) e9 t

$ e* m( v$ M3 z1 Z3.4. 修改链接文件
, M# G3 ^- A8 h: M$ f为了把帧缓冲区和视频缓冲放到外部 SDRAM,把字体、图片等素材放到外部 Flash, 需要修改链接文件。不同的 IDE,它的链接文件是不同的。对于 STM32CubeIDE,它的 链接文件是 STM32F746NGHX_FLASH.ld,对于 EWARM,它的链接文件是 stm32f746xx_flash.icf,对于 MDK-ARM,它的链接文件是 STM32F746G_DISCO.sct, 它们的语法略有不同。大家可以参考它的结构进行修改。; v5 K% \7 X4 w9 @

0 {" `9 l9 T# E) R* u( D; Y+ Y! X" v% z4 H2 K
  J$ }$ ~' z# m) p2 l8 q
4
1 b' K  {9 N- p2 u5 X% S. B, A! Z小结
& h; f+ B2 S: ^以上就是 LTDC RGB 接口 LCD 的 TouchGFX 工程的移植步骤,本文档对关键步骤进 行了解释说明,具体细节可参考 AN4861 和官方的 TBS。, p: [. E! a( U. X7 _
6 B4 X$ m7 O9 D1 q
' ?2 }0 [* g4 y# q
▼▼▼
点击按钮下载《LTDC RGB 接口 LCD TouchGFX 工程的移植步骤》原文档。1 ^- b, Z* T) G# R# V5 Z3 k
点击下载" J( D4 s% }$ G; W& [/ s

) Y8 W$ H( d8 S
赞 收藏 评论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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版