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

F429I Discovery开发板TouchGFX CubeMX移植教程

[复制链接]
adm 发布时间:2019-1-26 21:12
刚接触TouchGFX几天,由于网上TouchGFX相关资料非常有限,填了n多的坑,终于在Discovery开发板上移植成功,为了帮助大家尽快熟悉TouchGFX,特整理了移植的过程,供大家参考,水平有限,错误难免,望大家见谅!
1 l9 e# L0 o2 z2 U8 S
: y: }# y" I; O- P0 L% y首先,CubeMX5.0已经开始支持F4、F7系列的MCU使用TouchGFX了,最新的固件库里也有相关的例程,可以很方便的烧录到板子上,体会一下TouchGFX的强大图形效果,不过看过之后,自然想到的是自己如何也能够编写出华丽的图形界面,安耐不住内心的冲动,开始打开CubeMX开始配置项目。不过由于缺乏相关资料,这两天一路移植过来,遇到的坑,说起来都是泪,特写出来,希望大家以后能够绕道走,避免掉坑。+ R" ~- w, y, V( }% `) q# b" M
废话不说,进入正题。按照CubeMX的提示,选择F429I Discovery板,进入配置,根据提示,选择Discovery板默认配置,采用这个默认配置,基本上SDRAM、CRC、Tim、LED、I2C、SPI、LTDC等外设基本都根据板子配置好了,仅仅做一些简单修改即可。. b7 c, F# \% Q. [
具体几个需要配置修改的地方如下:- Q# v3 C" \6 D
时钟设置为主频168M,最下面的LCD CLK设置为6-18M之间,过高就会花屏,过低刷新率就变低(实测6-18M看不出来有什么变化)。' h9 f$ K% z& v" i  X

+ S3 q5 E* x0 n  |/ O- O 1.jpg
0 p) w4 E. B1 X) ^! t3 f) B+ vDMA2D 配置页面,设置颜色格式为RGB565
/ B5 O6 @9 e4 H2 i4 C) I1 @. q) b/ u* ^5 x" a- X
2.jpg
$ I1 y! Z% K9 N5 q. WLTDC配置页面,上面设置为RBG666,下面屏分辨率的参数按图设置
; ]1 b% k4 t' A" a; \  ~0 J% M7 B2 i! A
3.jpg   c' i3 l- P" `5 {+ W: m( L& k
图形选项如图所示,选择TouchGFX和LTDC界面  G! H  |+ }- q& z1 Y8 Q
分辨率和像素格式如图,选择240*320 RGB565
& c4 b& j: |; c" M1 T6 t+ @4 D+ p* L$ F. ?) J, C! N& G# z
4.jpg
0 T9 S3 U: [% r# Q; x8 E在TouchGFX页面,在路径处填入TouchGFX设计器的文件路径,可通过右侧小黄文件夹找到。
: g: g" u4 w  l! S) v9 I6 r6 o4 Q8 s" m8 R, X5 n$ K" \# F
5.jpg
$ K$ w6 g/ E% j在参数设置页面,按LTDC和SPI的接口,选择相应端口,如果不是Discovery板,需要根据实际接口选择,这一点很重要。
& w( ^" w: z0 X2 C/ I待以上设置都配置完成,写好项目名称、IDE软件类型以及生成项目的一些选项后,点右上角的GENERATE CODE按钮,生成TouchGFX项目文件。生成后先不要用KEIL或其他IDE打开项目,需要还回到CubeMX中,调用TouchGFX设计器进行图形界面设计。调用TouchGFX的进入点如下图红箭头所示,没有生成项目是,该按钮为灰色,项目生成后,该按钮就为有效的蓝色了。(图中我没有实际生成项目,故图标为灰色)
: @5 ^. N8 w' z; v- n 6.jpg ' S' s9 [- N, [/ V
点击Execute进入TouchGFX设计器。
6 u" W: E) `' e 7.jpg 9 x# b7 z% R1 X2 |
电脑速度慢,启动时间有点长。4 Q, x/ Q1 [( K

( y+ F: `; K% u 8.jpg
: ^5 W5 W% J, F" l- V7 f进入设计器后,利用左侧的各种控件,设计自己的GUI界面,该过程涉及素材搜集、界面配色、美化等,比较耗时,不过多讲解,这里设置了6个按钮,其中1、2按钮配置了点击事件,事件触发一个动作函数,在设计器里为两个按钮的动作函数命名,下来KEIL里编程需要用到。' Q8 x' @5 z- z8 z2 P
界面编辑完成后,点保存,并点右上角按钮生成TouchGFX代码,如下图所示:* x3 I/ \% Y! L( V; ~1 _
9.jpg
; K) y( N& F8 D- K& g
/ L3 L; ]$ D$ n' ^$ Z' |% X; G1 H
/ u+ {6 r. m0 a1 P. B
' O5 z- k, M5 I2 ]1 g经过一段时间的等待,左下角提示栏提示代码生成完毕,即可关闭TouchGFX设计器,回到CubeMX中,再次点击CubeMX右上角的GENERATE CODE按钮,生成完整的包含刚才设计器里设计界面源码的TouchGFX项目文件。这时可以按提示用KEIL打开项目文件。
* n2 e" A+ R3 m/ M这时我们还要给CubeMX自动生成的项目文件查缺补漏,否则直接编译是通不过的。
9 r0 x4 o* b7 T1 z1、为项目文件添加TouchGFX源码库$ W8 S% W" |/ @- j* d6 _6 S0 x1 N
CubeMX生成的TouchGFX项目,竟然连TouchGFX的lib库都没有自动添加,实在想不通,只能自力更生,手动添加了。在项目文件夹下& J5 E! C6 Q! Y, f
\Middlewares\ST\TouchGFX\touchgfx\lib\core\cortex_m4f\Keil 目录中找到touchgfx_core.lib,在KEIL里添加进项目。
% ~. S, c1 I& v- W) U2、添加Discovery板的触摸驱动6 t# ?9 i3 V8 ]% s0 B; ~- ?
到CubeMX5.0的F4固件库内找到CubeMX F4 discovery驱动夹复制到项目文件的BSP目录,然后添加如下两个需要的驱动文件到项目中。0 N3 `3 Q; P1 P; Y
stm32f429i_discovery.c和stm32f429i_discovery_ts.c,同时STM32F4TouchController.cpp开头,添加包含stm32f429i_discovery_ts.h的语句,注意添加位置,需要在extern "C"声明范围内。同时将复制过来的驱动文件夹的头文件路径在KEIL中保存一下(点魔术棒设置)
# o, g5 _/ A+ g" V5 ^2 W3、去掉CubeMX错误添加的两个驱动
, L! f. I: v# cexc7200.c 和ts3510.c,这两个文件没有用,反而导致编译错误。
& M7 h. z7 S  W6 w* B2 h5 k+ _ 10.jpg - x- l9 y5 E3 f  A" h
! N! C6 A; B% Z% i7 r
4、两个地方添加extern "C"声明
) [& F+ V$ |0 v& }* ga、main.cpp 90行处, g9 B/ _- d- h; }/ O: Y+ k
11.jpg
; [2 M$ p7 Y, @" |0 d% Q. I* |1 z' s! T. X  ^/ j- x
b、BoardConfiguration.cpp 286行处; H6 `$ F4 |: E8 w) e) I8 G% R
12.jpg
/ H( a+ q3 f- K& S  M5 ~+ a: M& j* ?
& E& t+ C; x7 y& H5、BoardConfiguration.cpp 第213行处3 {. @) f+ q; p3 M8 \7 h3 p$ A2 m
void LCD_Delay(uint32_t Delay)函数注释掉,与其他函数重复了; q4 ]& u" l5 V2 R' {
% R3 s) `% q  w* G+ J
6、STM32F4TouchController.cpp文件第21行,将系统注释掉的触摸初始化函数恢复: G& e) P, @9 s) a$ D' h# X# w
BSP_TS_Init(LCD_GetXSize(), LCD_GetYSize());
8 b# N* e- Y8 w2 z: n( e
& m6 ~" j- M' A, }( E7、STM32F4TouchController.cpp文件第32行,将系统注释掉的触摸数据获取代码恢复,同时注意将state.后面的x、y改为大写的X、Y(原定义为大写)
, m6 Q$ a; S0 jif (state.TouchDetected)
7 }  x- _) B0 V9 W+ G! q+ E1 N0 g    {
8 v/ ]  O$ N% l& N/ c" e        x = state.X;
' |8 n7 b) j4 {# f8 r6 M) A        y = state.Y;4 W* ~' v3 T8 L4 D0 P% E
        return true;9 q5 S8 m( _3 h8 |
    }
2 ~9 {6 ^8 M' e& H
% P' U: I# ~4 E4 R0 g0 {- C+ v至此,经过修改的项目大致可以通过编译了,可以试着编译一下,会出现一些警告,但是不会有错误。不过未能通过编译,请按上述步骤检查项目代码修改情况。
, F6 n" I6 _- E) C9 L4 `' `
7 g* K8 B; ]$ K, E未完待续……1 Z. d0 ?7 w( h* k) K( b
收藏 9 评论9 发布时间:2019-1-26 21:12

举报

9个回答
adm 回答时间:2019-1-26 21:44:20
续上节……
( F; |0 J+ ]* _: e) `0 ]3 Y3 i8 ]* i: g) P- n7 U# M% j# v
项目基本框架编译通过,只能说迈出了成功的第一步,如何把图形界面的各种控件和板子的各类外设联系起来,形成互动,才是我们想要实现的。这里以上一节教程的按钮1和按钮2为例,来实现分别控制板上的LED3和LED4,这是F429I Discovery开发板上预设的两个LED。
! C: B  K+ j3 v  [5 R' f: Q上一节教程中,我在工作区页面里设置了6个按钮,其中按钮1和按钮2设置了点击事件,关联了两个事件驱动函数,这两个虚函数在generated文件夹下WorkSpaceViweBase.cpp中,WorkSpaceViweBase.hpp头文件里也有声明。/ l1 G. j! _/ b" g5 d! b
13.jpg # j0 k3 Z8 `& f! Y/ O) A
不过这两个文件的内容我们不要动,按提示,在gui文件夹下的WorkSpaceViwe.hpp和WorkSpaceViwe.cpp中声名和定义这两个虚函数。如下图:
( h0 ]$ ]% F" i" J* G  Y 14.jpg ' E; o' t1 u3 y! a8 c

' R$ J* U+ A0 A, o% P( c 15.jpg / M1 L8 t! D' Y0 j

2 a/ P/ ^) \: H8 G# _6 O图上红框所示就是两个按钮点击事件函数,这两个函数调用板上的LED驱动函数,翻转相应LED的电平,从而实现LED随按钮的按动而开关。其他相关外设也可以按这个思路来驱动。至此,按钮应该可以控制板上的LED了,编译项目文件,烧入板子。经过好几分钟的耐心等待(电脑速度慢,没办法),终于预先设计的GUI界面在LCD上出现了,点击按钮1和按钮2,嗯,貌似有点动静,但是不能控制?仔细一想,原来板上的LED还作为板子LTDC行同步和场同步的指示,LCD刷新比较快,所以LED控制失常。找到行同步和场同步开关LED的地方,将相应的LED控制语句注释掉,具体位置在GPIO.cpp中,如下图所示:
' i3 h& H/ `1 z. ?( d 16.jpg
5 L) p0 u& f; P  @% ^' t) M* w) A' H: C1 \
再次编译项目,烧录程序。真个世界都安静了,点击屏幕中的按钮,相应的LED依次点亮、熄灭。4 e% X0 V6 t% _5 D5 n

/ q' E: ]" c- k7 |& w4 @+ `) ~到这里,这个教程就真的结束了,希望能够起到抛砖引玉的效果,如果错误之处,还望告知,希望与大家一起学习,谢谢!
* L! V+ W* G9 u- J+ G) _" G% B" g2 x# e+ l! O- b

' ]: b: l5 R. ^' m/ o/ `: B
. j, |" I4 Z" s, b
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(),然后就会出错。我想请教一下,有什么原因造成这个问题。你有没有配置好可以用的基本程序。
2 M! p* f! U1 ]% l* ~+ c非常感谢!
adm 回答时间:2019-2-16 21:17:10
qq3531739406 发表于 2019-2-15 13:43
/ `% [) S1 @# ^8 M你好,我现在使用的时STM32F469I DISCOVERY板,我现在学习使用TOUCHGFX。但是在CUBEMX配置完了之后,程序会 ...

/ d! M) r0 Y% u/ f7 ^2 ]你可以用CubeMX5创建一个F469I discovery板子的工程,CubeMX会提示你是否使用板子默认配置,选择Yes,这样就可以生成一个根据板子硬件的默认配置,在里面可以好好看看各种正确配置,最好记下来,以备以后使用。
shuai532209720 回答时间:2019-5-30 22:29:01
admvip 发表于 2019-2-16 21:17' \& q+ ]/ c& {0 @) c
你可以用CubeMX5创建一个F469I discovery板子的工程,CubeMX会提示你是否使用板子默认配置,选择Yes,这 ...
" J4 [. E; X$ D9 N$ m7 ^
您好,我这边用STM32F469I-discovery的开发板,采用的也是CubeMx5的默认配置,也添加了touchgfx的lib库,经过修改编译未报错,但下载进去之后,屏幕不亮,黑屏的状态。
wjjontheway 回答时间:2020-10-5 21:18:07
感谢楼主分享,正好手上有一块F429 Discovery的板子,希望通过楼主的分享能体验下TouchGFX

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版