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

【经验之谈】基于STM32H7B3-DK的TouchGFX触控点亮LED的经验分享

[复制链接]
STMCU小助手 发布时间:2022-12-8 16:00

1 使用TouchGFX Designer生成MDK5工程
% m) s& I$ _0 E4 }  j6 X' |: J( j9 J
+ ?! y$ |: u# F7 u# p开发环境

  TouchGFX软件版本:4.20.0

  MDK5软件版本:5.37.0

  STM32CubeMX软件版本:6.6.1

  开发板:STM32H7B3-DK

  桌面系统:Window10


' l) Z/ R% B2 ~5 g# j
/ Y6 n8 K$ a% V1 d) O( Q/ g! r* s1.1 产生keil工程模板, {+ m8 K" o2 e( @

5 R' @% A3 L/ Q2 q, @& \为了快速GUI开发,使用TouchGFX生成基于STM32H7B3-DK的MDK5工程模板8 r6 N$ a% C+ m' [0 k5 F
& m2 T& t* t( u
打开TouchGFX,点击创建新工程; l2 R0 k: u9 g+ |, \
2 R& A* [1 S7 j7 f

3 S7 \* e; i3 c. z3 B, J+ `9 z
" `1 |7 n, ^# V) Q自动跳转开发板选择界面,按照1-5步骤新建工程,注意不要出现中文路径,不然会出现一些意外错误.
2 b2 N2 G) B$ j) _, s" J2 _4 z. S
: Z) Q) o: y% }$ T. Q$ }- v. ]; t8 A! @& \5 u$ b8 t" G
. s) R+ m; A( C: j
TouchGFX生成工程结构如下,(后续删除EWARM,gcc,STM32CubeIDE等与keil无关的文件夹). a) U2 p: I0 r, _$ }2 G2 p
& O; ~$ P9 `* ~% m3 L. v( q4 q0 e

9 a- P, [" U  t; m7 K4 n  U! N8 T* I3 g$ T1 y' D
生成的文件夹里面有一个STM32CubeMX的工程文件,由于默认配置中生成的是STM32CubeIDE工程代码,我们需要的是keil工程代码,所以需要切换IDE(除了这点,不改任何配置)& E- m; ]5 c( c8 Y+ l
, p) V" y3 z3 {* d) B1 N

* k/ f- q6 e5 m% ?9 E6 O. U; p9 h! A' o" U4 h) i# W( X& _
双击.ioc文件,如果出现如下提示,点击Migrate
5 \  J1 N6 g  u! o  W
3 J' N8 d4 m3 P4 R& Q4 K) l/ C$ V7 V+ T2 S) z

! G8 O5 S+ u  ]5 g点击工程管理,IDE选为MDK-ARM,之后点击产生代码
3 ]$ \: r% e* A: o+ W- z# W6 |) g( ^) H0 S! X4 j
/ @( l  S/ G) A: t; p% c

1 w+ [; o% @7 u* u# U' j0 \% h/ g2 x此时,keil工程模板基本建立,但此时如果直接打开keil工程,编译(此处选择V5编译器,因为V6编译器会出现- q/ o$ j' @8 Q  ?
很多错误)会出现如下问题,是由于TouchGFX没有生成代码,导致确少界面相关源代码; i3 Y& ]  f6 y4 g% r" i4 S5 z

0 K% q' B' K, h, A# Z
+ `- }! F  N' R% q- S
) [+ e" Q' |+ z! O. T只需要回到TouchGFX,点击产生代码3 ]9 H$ p1 L. K/ e. [1 i
+ y! E9 T5 o  D0 h9 B
( s) M( X6 d( I4 I
. Q' J3 s; {/ x
此时,keil界面会弹出工程变更信息,点击是
7 ~) e5 L  w6 S- K) ?
- S- i1 @& T; Q* ~% D0 O! ]# a- o0 n, R5 {% m+ q

5 `8 E; k1 N) {* R再次编译keil工程,无报错,如果有警告,再次编译后可消失,生成.hex文件
; X& f7 }, }5 R+ \% V1 U: f& w' C7 H
/ l( y. \, U3 l  J

3 i( Y' s7 w! w  t" s# w* D1 T打开STM32CubeProgrammer,连接开发板,点击EL,选择外部flash烧录算法: a8 e' o: V8 S7 I
8 d( Y9 F' T& c

8 w. y& e9 S+ Z5 _3 s" ^
" x. \. z, L0 R& V. |& A( l之后点击下载,选择.hex文件,烧录: _" T4 O9 T2 P: }, N- ]: P  A

& ^' g. B9 d. ?! k" _& [2 [, L8 Q- u1 i
$ E! @3 o' c) o
在开发板已经运行中烧录程序,如果出现如下错误,断开设备重新连接一次再烧录,烧录前出现白屏表示正常
8 h3 h+ ~2 ]+ \- G6 ?
: m' W6 M6 h1 w! P$ ]/ X! i( L) L3 F
/ g2 B* T% N/ K, `0 X
% u. ]& ?5 T) ^: V+ S
使用由于生成的是空白模板,下载到开发板后为黑屏,此时回到TouchGFX,随便拖拽一个控件到界面,生成代码
- y; @6 ^/ [, f8 y
5 c3 H2 m! }: B  H. O5 Y7 R; `9 Z0 m3 H

$ a" m) I7 v: v6 R5 @- M7 a! V% A之后在keil中编译,再次下载后正常显示  z. W5 q- [" @7 w; `& Z. t1 n8 _& r
* A9 x: V; C/ O5 O8 W+ ?' |, `: Y

8 q. Z( c9 w# D, H/ |; @" ]
. r9 ]; I; {7 g& g' \2 keil环境下使用外部烧录脚本(stdlr)烧录QSPI
0 \( d1 ^" t' O% B
- W6 B/ v* F5 K7 }/ u    在GUI设计中需要大存储空间,这时候我们需要将代码和数据放在外扩的QSPI存储空间,尽可能的使用调试工
9 N- c( A* S! u5 M具一键烧录工具' n* A/ _/ @( e& u  l
3 r- \1 k) s& m, `4 A) S
软件: keil5,STM32CubeProgrammerv2.10.05 j6 M" s, p. q6 H( J: B' U  V

' F0 ~0 Y) Y: _7 }
: _+ Y# ]) I1 T% w烧录方法
& z- `- L4 T+ x) J9 r8 V  n% ]! q# v5 W) l! b: L
      Keil调试环境下,有两种方式进行外部QSPI存储空间的烧录。一种是基于FLM算法,在keil.BSP包中提供算法。$ n9 G/ j, n9 D
第二种方法是调用第三方的脚本进行烧录,这里使用ST公司的STM32CubeProgrammer所提供的相应的.stdlr脚本。& j+ \$ O, d( r5 [
& A6 w+ I9 ]- Y

8 I4 U! T; u5 v/ C# d) b4 h4 e设置环境变量! Y/ l+ B& P1 O: I) J9 E6 W

: a: a* _2 T* t4 G' k  b2 y3 d1.打开环境变量设置步骤# |* x$ L+ V, A, O$ ^
$ D; g- x* s5 K/ B! R1 [
  U8 f) B% l- q% B3 o- m) Q/ k  c
4 j& e6 F5 I$ R2 C0 ?' t& F
2.添加环境变量为STM32_Programmer_CLI.exe所在的安装目录。默认目录如下:' C; [8 l, h% l

6 r; ?1 j+ G0 o# U* P
1 g, f  _, k! b9 V% \' E0 R& Q8 S: j# r* v
3验证环境变量是否添加成功。打开CMD命令提示符,输入“STM32_Programmer_CLI -version”,显示如下即为设置成功。  |5 t1 `& l4 @  i; x9 U$ O

8 ~; k9 g2 v- u4 K
8 o7 d( S9 W: ^3 G5 B% w5 n5 `, t: |( m' o. A

5 e) O$ a) i  b! r4 v- }Keil下载设置7 s+ |" O* \8 C* c( V$ P9 u
( q2 K9 Z2 `. x. J
Keil中,我们采用第三方的工具下载的方式进行下载,步骤如下
0 d' @. _. F5 |" }# c9 b7 ~. _  \* t" G  c; c! f, e% p! ]# h
1. 配置下载工具如下图所示。最后第三步所填写的命令及参数如下:
3 }& W. m) _, ?- R' d- k
4 J& I, O/ M' N2 r: ^1 }: Z, s. b' R. C+ N" n
: G$ [1 _8 R5 B7 s% b! C4 q
    命令中的.\STM32H7B3I-DK\STM32H7B3I-DK.hex是工程生成的Hex文件,需要按照所在的工程进行修改。烧录# M4 `  G& U. n& O8 Q5 o
脚本stldr的目标也需要对应的按照实际进行修改。STM_Programmmer_CLI.exe会根据STM32H7B3I-DK.hex中的地$ ?9 E3 [/ e$ f
址信息决定将代码烧录到哪个地址,所以编译之前,必须在分散加载文件(*.sct)中说明将代码放到外部QSPI Flash的地址范围。
/ M8 l4 J7 U% }2 q' |# \  {" t9 J( [# N4 u
) i  Z, d5 v! e& g* j
" g  W* }# \3 Q4 c! D9 }2 Y- |
2下载结果
; o$ k# Q; P- X/ L& {
8 Z$ A# [* v, |) \& n7 h下载完成后按一次复位按钮就可正常显示9 V3 ^; V: L; a- |0 _" u: T
2 s1 E! M4 j" d; l% }* E
' I- U. D; {3 a' B

/ K0 P) g$ D8 n! J' h2 {( |3 TouchGFX触控点亮LED
! n* w' Z2 a0 ^5 F" P$ H4 h0 r6 ]* H; E0 \8 {3 |8 _+ G
TouchGFX用MVP架构将UI界面,界面逻辑,硬件系统三者分离  d! @- }, C8 c: I8 |& r; x5 D* [

/ R* \9 _( r1 Z& UView: 负责描述UI界面,比如包含哪些控件、控件如何布局等,Touchgfx Designer软件里的工作就是在构建View4 Z1 ~/ y: n" J5 R+ f/ t1 s7 ?# q
Model: 保存与UI界面有关的数据;有个tick()函数,每秒执行60次,实现与硬件系统交互,相当于硬件与Touchgfx之间的桥梁4 P2 i/ ]0 t3 u5 E) ?, g
Presenter:在Model与View之间起传话筒的作用* k8 r7 T! s! z- }  `: }; M1 x- d
System:Touchgfx以外所有的其它部分都属于System的范畴$ F& \( A' F. O3 D* k3 J
! `6 g; Q2 N6 w- x6 }+ M; g

8 |) I( ]( i8 }7 |
, g* ~& j2 O2 ?& p我们也完全可以在View的点击事件回调函数里直接调用HAL_GPIO_TogglePin函数,但是这样会破坏MVP结构,不推荐这样做。! j/ K) X5 ?+ W5 t) g0 Z6 b( r; b' C, r
所以还是按官方的方法,一层一层剥套娃吧。之所以使用MVP架构是为了把代码功能分离开来,增强系统的可移植性和可阅读性。
% v* ~2 J  k$ j! ~0 I/ A& f" Q7 y* A
# ?# b3 P" j  B
& x( h- o2 c8 ?5 s4 Z1 ~1. 通过STM32CUBMX配置LED31 Y( }2 }- V: {4 }0 \( d% j

/ x  ?. D) r, Y% j, P4 @$ J+ f2. Touchgfx Designer里放一个按键,并为它添加交互函数btnClicked:+ K/ ^1 C/ X8 z$ _4 Y% a

# ]' d6 N- |: c6 |- Z, \0 Y( A- p' M3 I# U

. e4 k$ i- q. \" [) q) ]6 |; f1 A8 d3打开keil,然后在Screen1View中实现btnClicked:4 k. |5 j4 f  w# e5 _; {
0 J. L5 @# G  l' O5 a
; y' N' H& w' A. d) S; F0 W1 f4 R
- {  W' i" k& L7 @. b- I
, A9 R9 G! J) Z( L4 F% {

7 R; A7 u# }, Y3 g" t4由于presenter里没有btnClicked这个方法,所以需要为它添加一个:, q3 R. n( f( i9 X) n% h

5 C: m- [4 q2 f, _% f2 u- s- N8 y  B8 ]
8 J5 d$ i# K' S0 Q

2 N) E. l5 b( w* |3 `1 u+ u9 U
0 P, \% Y8 W5 K' ]5 T* ~5、同样,Model里也没有toggleLED方法,依然需要为它添加。! n, M+ F- N/ b
, J" r# x0 ]( {" B+ h% R# a/ ]# y
* I0 N3 U6 g7 A. c9 i
( r9 x4 T  y5 a) c6 }8 G
% Z% G; N8 A8 a* [5 ]


, S6 ~0 t. h( _# `7 p

作者:极致创客

# i: A0 q' M) [3 v/ [6 e, N' Q1 n
赞 收藏 评论0 发布时间:2022-12-8 16:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版