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

F429I Discovery开发板TouchGFX CubeMX移植教程

[复制链接]
adm 发布时间:2019-1-26 21:12
刚接触TouchGFX几天,由于网上TouchGFX相关资料非常有限,填了n多的坑,终于在Discovery开发板上移植成功,为了帮助大家尽快熟悉TouchGFX,特整理了移植的过程,供大家参考,水平有限,错误难免,望大家见谅!
- o8 C' R) `4 H6 X9 r
6 y& k8 v6 M' c( z首先,CubeMX5.0已经开始支持F4、F7系列的MCU使用TouchGFX了,最新的固件库里也有相关的例程,可以很方便的烧录到板子上,体会一下TouchGFX的强大图形效果,不过看过之后,自然想到的是自己如何也能够编写出华丽的图形界面,安耐不住内心的冲动,开始打开CubeMX开始配置项目。不过由于缺乏相关资料,这两天一路移植过来,遇到的坑,说起来都是泪,特写出来,希望大家以后能够绕道走,避免掉坑。* M' D7 T; \- e- P/ K5 N
废话不说,进入正题。按照CubeMX的提示,选择F429I Discovery板,进入配置,根据提示,选择Discovery板默认配置,采用这个默认配置,基本上SDRAM、CRC、Tim、LED、I2C、SPI、LTDC等外设基本都根据板子配置好了,仅仅做一些简单修改即可。3 o4 X$ F; k5 A" ~3 @7 I. J
具体几个需要配置修改的地方如下:. U/ d) H) Q% _5 u# {" m
时钟设置为主频168M,最下面的LCD CLK设置为6-18M之间,过高就会花屏,过低刷新率就变低(实测6-18M看不出来有什么变化)。
) }3 U  C- `2 D4 p+ Z
; G& n  ]8 p1 I( c8 v8 I 1.jpg
' s& H! e3 B, T' n0 _- D5 n  n; O: YDMA2D 配置页面,设置颜色格式为RGB565( a; G5 O0 }4 }  t

8 ?8 T$ v/ F( H7 J  K" I4 X: K 2.jpg
3 N4 G+ i; Q$ z) Q/ P8 bLTDC配置页面,上面设置为RBG666,下面屏分辨率的参数按图设置' d9 M& Y' @0 }

0 Y! [# `; u& V3 ]4 M 3.jpg ) x8 H3 V' n- U3 r6 M& }
图形选项如图所示,选择TouchGFX和LTDC界面7 f4 k, b7 Y& J) Q
分辨率和像素格式如图,选择240*320 RGB565- X; G2 \2 J. X: b, G+ h
$ t% u* I) r- b6 N/ q5 W, e
4.jpg % n/ i# a# ?1 _$ n' l2 j& i
在TouchGFX页面,在路径处填入TouchGFX设计器的文件路径,可通过右侧小黄文件夹找到。0 ]+ i" w/ Y# b
4 w) T5 M  W2 z0 K9 k" V* k0 _
5.jpg
2 [% t' l4 q* l' D( l0 w- g' b在参数设置页面,按LTDC和SPI的接口,选择相应端口,如果不是Discovery板,需要根据实际接口选择,这一点很重要。
) V0 Q* C. A8 n9 L+ f. `- }, O待以上设置都配置完成,写好项目名称、IDE软件类型以及生成项目的一些选项后,点右上角的GENERATE CODE按钮,生成TouchGFX项目文件。生成后先不要用KEIL或其他IDE打开项目,需要还回到CubeMX中,调用TouchGFX设计器进行图形界面设计。调用TouchGFX的进入点如下图红箭头所示,没有生成项目是,该按钮为灰色,项目生成后,该按钮就为有效的蓝色了。(图中我没有实际生成项目,故图标为灰色)
! e' ~0 }7 R5 R6 ?/ t' _ 6.jpg
3 z; y. I# A% ?1 Y" L$ Z点击Execute进入TouchGFX设计器。, m6 d2 I  o/ _0 |8 Y5 @. O
7.jpg   @& m! b5 o1 Z( M# m( ?
电脑速度慢,启动时间有点长。
  A! K  n7 G! P' }' w4 [1 c
1 a# X. J5 P* e& D+ ^ 8.jpg 9 E+ N! q5 q5 W2 Q. W0 M0 ^
进入设计器后,利用左侧的各种控件,设计自己的GUI界面,该过程涉及素材搜集、界面配色、美化等,比较耗时,不过多讲解,这里设置了6个按钮,其中1、2按钮配置了点击事件,事件触发一个动作函数,在设计器里为两个按钮的动作函数命名,下来KEIL里编程需要用到。
7 v! K! k7 t! w/ L7 D, k2 ^界面编辑完成后,点保存,并点右上角按钮生成TouchGFX代码,如下图所示:
  o& [! P! f8 M& {/ y; d 9.jpg
. G+ T0 a- o+ Z$ B3 Y! V/ y- B' ^. _! s1 ?1 A; u6 u) v5 M
( J8 w2 L0 x1 ?  O
! _. M3 Q* S  ?: l+ q
经过一段时间的等待,左下角提示栏提示代码生成完毕,即可关闭TouchGFX设计器,回到CubeMX中,再次点击CubeMX右上角的GENERATE CODE按钮,生成完整的包含刚才设计器里设计界面源码的TouchGFX项目文件。这时可以按提示用KEIL打开项目文件。% @; E* P. b; S' p* F2 S
这时我们还要给CubeMX自动生成的项目文件查缺补漏,否则直接编译是通不过的。$ r7 ^7 n$ @9 w; ~8 x- \& r$ q- A
1、为项目文件添加TouchGFX源码库: |0 @$ u! J( t
CubeMX生成的TouchGFX项目,竟然连TouchGFX的lib库都没有自动添加,实在想不通,只能自力更生,手动添加了。在项目文件夹下
  q0 a+ }4 q4 K" X' V( G' u\Middlewares\ST\TouchGFX\touchgfx\lib\core\cortex_m4f\Keil 目录中找到touchgfx_core.lib,在KEIL里添加进项目。
1 u( k7 z2 o1 K, Q3 A) @% H2、添加Discovery板的触摸驱动
( z$ \5 z: V+ h3 J到CubeMX5.0的F4固件库内找到CubeMX F4 discovery驱动夹复制到项目文件的BSP目录,然后添加如下两个需要的驱动文件到项目中。
* j7 B$ y3 F' Astm32f429i_discovery.c和stm32f429i_discovery_ts.c,同时STM32F4TouchController.cpp开头,添加包含stm32f429i_discovery_ts.h的语句,注意添加位置,需要在extern "C"声明范围内。同时将复制过来的驱动文件夹的头文件路径在KEIL中保存一下(点魔术棒设置)
0 e/ }- W9 ]) O/ {* S3、去掉CubeMX错误添加的两个驱动
4 t2 h. C4 Q6 N; y+ eexc7200.c 和ts3510.c,这两个文件没有用,反而导致编译错误。
* ]! B: ^; _$ l& r- m% D7 D  W 10.jpg - q3 r  h3 K+ {- c: ]
. B- u. {' I0 r1 v
4、两个地方添加extern "C"声明; j" ^2 e4 k( [% j" f( M$ z
a、main.cpp 90行处
9 f; o  Q. ^: d5 s3 ~ 11.jpg
" C* j# ]7 ^" M0 M: U3 \
5 K/ Z* d, J; c& ~) ^# x6 Wb、BoardConfiguration.cpp 286行处1 y* U6 Q2 D! V0 [
12.jpg
+ Q- A3 M! f: U& N6 J, Q1 L( C1 {
5、BoardConfiguration.cpp 第213行处: E! I* l8 n0 y6 [: Q- l8 M$ n$ V
void LCD_Delay(uint32_t Delay)函数注释掉,与其他函数重复了
% Z, M: x0 M0 Y9 V$ W" r5 {
) |7 G. Z; J8 ~, O$ a9 o  ?$ G; c" i! i6、STM32F4TouchController.cpp文件第21行,将系统注释掉的触摸初始化函数恢复' r! j0 y6 |1 |3 r& V% c
BSP_TS_Init(LCD_GetXSize(), LCD_GetYSize());. p9 M4 w! G) C: J' E; B' M4 Q

* z: I' r! m8 K7、STM32F4TouchController.cpp文件第32行,将系统注释掉的触摸数据获取代码恢复,同时注意将state.后面的x、y改为大写的X、Y(原定义为大写)0 ^- V1 U1 c) o# H) M5 t
if (state.TouchDetected)
( X  Y5 u) Z2 i- `/ O' _" r    {
/ i. b. x8 t0 R% b; Q        x = state.X;" d# }. Q5 P  l2 v- m2 S. x9 s
        y = state.Y;
8 N" |& I! p6 h0 }3 a$ U        return true;2 h, x1 T) U$ J5 a; o' E
    }
1 Y' o  G7 X7 B
/ W4 U: E$ l: l7 d/ `4 d至此,经过修改的项目大致可以通过编译了,可以试着编译一下,会出现一些警告,但是不会有错误。不过未能通过编译,请按上述步骤检查项目代码修改情况。  n& j* j# [9 Z& b4 U3 `: l7 H: r

9 r! |% k, b+ a0 w# B. K) V未完待续……
3 U3 F+ l, W8 B' D. D
收藏 9 评论9 发布时间:2019-1-26 21:12

举报

9个回答
adm 回答时间:2019-1-26 21:44:20
续上节……$ O- m# G! l; R( U( D  e
8 i& @& ~& `! e
项目基本框架编译通过,只能说迈出了成功的第一步,如何把图形界面的各种控件和板子的各类外设联系起来,形成互动,才是我们想要实现的。这里以上一节教程的按钮1和按钮2为例,来实现分别控制板上的LED3和LED4,这是F429I Discovery开发板上预设的两个LED。8 r( D( R* }$ H$ p: _
上一节教程中,我在工作区页面里设置了6个按钮,其中按钮1和按钮2设置了点击事件,关联了两个事件驱动函数,这两个虚函数在generated文件夹下WorkSpaceViweBase.cpp中,WorkSpaceViweBase.hpp头文件里也有声明。
8 ]: _7 Y3 l/ S/ |; T9 V2 B 13.jpg 0 ?  t- _$ m. f- R& h
不过这两个文件的内容我们不要动,按提示,在gui文件夹下的WorkSpaceViwe.hpp和WorkSpaceViwe.cpp中声名和定义这两个虚函数。如下图:7 ]0 g& L/ e: S  P5 _
14.jpg
# ~% C8 {  K' c; p' f3 Z. G. M* K/ W5 H, M3 _7 A- X/ |: D, v* c3 O# i
15.jpg / Q/ a" U. |: r0 [0 J6 E4 Y0 b

# Z3 X: ~8 w+ E0 A3 ~; N8 P, p图上红框所示就是两个按钮点击事件函数,这两个函数调用板上的LED驱动函数,翻转相应LED的电平,从而实现LED随按钮的按动而开关。其他相关外设也可以按这个思路来驱动。至此,按钮应该可以控制板上的LED了,编译项目文件,烧入板子。经过好几分钟的耐心等待(电脑速度慢,没办法),终于预先设计的GUI界面在LCD上出现了,点击按钮1和按钮2,嗯,貌似有点动静,但是不能控制?仔细一想,原来板上的LED还作为板子LTDC行同步和场同步的指示,LCD刷新比较快,所以LED控制失常。找到行同步和场同步开关LED的地方,将相应的LED控制语句注释掉,具体位置在GPIO.cpp中,如下图所示:
4 p1 a2 ?( C  O" c3 l 16.jpg
3 c  K6 c7 `; R6 b0 S" p, d# U' v2 `9 |9 p/ U% }+ h
再次编译项目,烧录程序。真个世界都安静了,点击屏幕中的按钮,相应的LED依次点亮、熄灭。
5 l) H5 s) X$ y- w6 m6 e4 C: Q+ ~, K1 D% W' \& F" [
到这里,这个教程就真的结束了,希望能够起到抛砖引玉的效果,如果错误之处,还望告知,希望与大家一起学习,谢谢!( B$ d" h5 p* q+ W
$ j. `6 G7 f$ v( @! I
! g: f4 r) d, ~1 v* I/ {" f

! h% N7 K0 F- V5 H
Kevin_G 回答时间:2019-1-27 10:58:28
非常赞,多谢啦!
yanhaijian 回答时间:2019-1-27 11:29:05
ST买下后相信会发展好。
Bowen 回答时间:2019-1-28 08:43:21
感谢楼主分享,我也有这个板子,改天移植玩玩
STMCU-管管 回答时间:2019-1-31 09:57:56
谢谢楼主分享!
qq3531739406 回答时间:2019-2-15 13:43:43
你好,我现在使用的时STM32F469I DISCOVERY板,我现在学习使用TOUCHGFX。但是在CUBEMX配置完了之后,程序会进入这个函数LTDC_ER_IRQHandler(),然后就会出错。我想请教一下,有什么原因造成这个问题。你有没有配置好可以用的基本程序。/ M- l0 ?6 Y- H) `$ I6 G& Z
非常感谢!
adm 回答时间:2019-2-16 21:17:10
qq3531739406 发表于 2019-2-15 13:438 t+ S3 D/ M/ M% c$ B1 P- L1 |
你好,我现在使用的时STM32F469I DISCOVERY板,我现在学习使用TOUCHGFX。但是在CUBEMX配置完了之后,程序会 ...

' \% A+ s8 x: S& v- J你可以用CubeMX5创建一个F469I discovery板子的工程,CubeMX会提示你是否使用板子默认配置,选择Yes,这样就可以生成一个根据板子硬件的默认配置,在里面可以好好看看各种正确配置,最好记下来,以备以后使用。
shuai532209720 回答时间:2019-5-30 22:29:01
admvip 发表于 2019-2-16 21:17" c5 d- S( s- I/ G' C+ j
你可以用CubeMX5创建一个F469I discovery板子的工程,CubeMX会提示你是否使用板子默认配置,选择Yes,这 ...
# p. r% M/ o1 F5 h2 L4 r
您好,我这边用STM32F469I-discovery的开发板,采用的也是CubeMx5的默认配置,也添加了touchgfx的lib库,经过修改编译未报错,但下载进去之后,屏幕不亮,黑屏的状态。
wjjontheway 回答时间:2020-10-5 21:18:07
感谢楼主分享,正好手上有一块F429 Discovery的板子,希望通过楼主的分享能体验下TouchGFX

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版