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

F429I Discovery开发板TouchGFX CubeMX移植教程

[复制链接]
adm 发布时间:2019-1-26 21:12
刚接触TouchGFX几天,由于网上TouchGFX相关资料非常有限,填了n多的坑,终于在Discovery开发板上移植成功,为了帮助大家尽快熟悉TouchGFX,特整理了移植的过程,供大家参考,水平有限,错误难免,望大家见谅!
* s) i6 I, U9 G, O: i5 w1 x: W7 n- J# k: Z
首先,CubeMX5.0已经开始支持F4、F7系列的MCU使用TouchGFX了,最新的固件库里也有相关的例程,可以很方便的烧录到板子上,体会一下TouchGFX的强大图形效果,不过看过之后,自然想到的是自己如何也能够编写出华丽的图形界面,安耐不住内心的冲动,开始打开CubeMX开始配置项目。不过由于缺乏相关资料,这两天一路移植过来,遇到的坑,说起来都是泪,特写出来,希望大家以后能够绕道走,避免掉坑。9 o6 V8 k# T! c6 j! k) M
废话不说,进入正题。按照CubeMX的提示,选择F429I Discovery板,进入配置,根据提示,选择Discovery板默认配置,采用这个默认配置,基本上SDRAM、CRC、Tim、LED、I2C、SPI、LTDC等外设基本都根据板子配置好了,仅仅做一些简单修改即可。  w0 T) M) I6 {
具体几个需要配置修改的地方如下:
) h9 {1 ]% g, q5 c: E. p时钟设置为主频168M,最下面的LCD CLK设置为6-18M之间,过高就会花屏,过低刷新率就变低(实测6-18M看不出来有什么变化)。
3 J* d! a' c3 }" K9 ]' r# P6 v( z7 E. c( I0 @9 w3 y5 M1 b9 S6 [
1.jpg
2 v  l* ~, V2 h& ^DMA2D 配置页面,设置颜色格式为RGB565
2 Y: R5 `1 |: _/ f9 a3 l; g2 B, K3 ]2 N9 P, F
2.jpg , H( N) ^1 i' h( m/ O
LTDC配置页面,上面设置为RBG666,下面屏分辨率的参数按图设置' G8 ?. V0 P; S: \# K2 l! Z
; c7 `" |* S  l
3.jpg
  ]" E$ g9 |! H: h图形选项如图所示,选择TouchGFX和LTDC界面
0 J) s* Y7 I5 q) W+ X分辨率和像素格式如图,选择240*320 RGB565
7 ?. R. e8 F2 }6 z9 r- J$ q' L1 v" f" Y6 D) J- l9 P9 a! [
4.jpg
+ M: L- u+ m! g: a' v$ ]在TouchGFX页面,在路径处填入TouchGFX设计器的文件路径,可通过右侧小黄文件夹找到。
3 v) {) L9 d0 |& M  R$ b6 v5 U3 Q1 X; U, H' @$ b& {5 D
5.jpg
3 i6 U- G9 \3 j5 B- J% _在参数设置页面,按LTDC和SPI的接口,选择相应端口,如果不是Discovery板,需要根据实际接口选择,这一点很重要。
. D1 r; @3 t: u' S: w待以上设置都配置完成,写好项目名称、IDE软件类型以及生成项目的一些选项后,点右上角的GENERATE CODE按钮,生成TouchGFX项目文件。生成后先不要用KEIL或其他IDE打开项目,需要还回到CubeMX中,调用TouchGFX设计器进行图形界面设计。调用TouchGFX的进入点如下图红箭头所示,没有生成项目是,该按钮为灰色,项目生成后,该按钮就为有效的蓝色了。(图中我没有实际生成项目,故图标为灰色)
: X  C0 \5 A& F: j+ R. J' P( S' K& ? 6.jpg
& b  [  \) F# q3 ~/ z' ^点击Execute进入TouchGFX设计器。$ r$ o' `5 G+ b1 {' ^
7.jpg 2 L7 _# L0 ^& f& `
电脑速度慢,启动时间有点长。
+ R3 |" A! N* a- _7 H" F. c% m
" N8 H6 J( }) M 8.jpg
8 A4 ?% `" b' t! v2 G5 K: ?4 E进入设计器后,利用左侧的各种控件,设计自己的GUI界面,该过程涉及素材搜集、界面配色、美化等,比较耗时,不过多讲解,这里设置了6个按钮,其中1、2按钮配置了点击事件,事件触发一个动作函数,在设计器里为两个按钮的动作函数命名,下来KEIL里编程需要用到。
$ K. k. L  i7 z: c* Y) \界面编辑完成后,点保存,并点右上角按钮生成TouchGFX代码,如下图所示:( @( V  k* u5 u8 q# n
9.jpg
9 X! B/ e; {0 _" U) V
' W7 e# q1 f+ k2 W8 A3 ^
; \4 u; }6 r9 v: s& X% H4 h7 G7 `
经过一段时间的等待,左下角提示栏提示代码生成完毕,即可关闭TouchGFX设计器,回到CubeMX中,再次点击CubeMX右上角的GENERATE CODE按钮,生成完整的包含刚才设计器里设计界面源码的TouchGFX项目文件。这时可以按提示用KEIL打开项目文件。
1 b0 H( K% f6 o9 X这时我们还要给CubeMX自动生成的项目文件查缺补漏,否则直接编译是通不过的。
4 Z6 {' Z. e! Z1、为项目文件添加TouchGFX源码库3 ^  ]. G2 _7 T) U6 w
CubeMX生成的TouchGFX项目,竟然连TouchGFX的lib库都没有自动添加,实在想不通,只能自力更生,手动添加了。在项目文件夹下6 U; [& N  d) x, X
\Middlewares\ST\TouchGFX\touchgfx\lib\core\cortex_m4f\Keil 目录中找到touchgfx_core.lib,在KEIL里添加进项目。
' \, r' r, ^  `! P. K  i2、添加Discovery板的触摸驱动" C$ n* B6 |& y7 \% o
到CubeMX5.0的F4固件库内找到CubeMX F4 discovery驱动夹复制到项目文件的BSP目录,然后添加如下两个需要的驱动文件到项目中。
/ \! ?/ V; N: X5 y$ B: z! xstm32f429i_discovery.c和stm32f429i_discovery_ts.c,同时STM32F4TouchController.cpp开头,添加包含stm32f429i_discovery_ts.h的语句,注意添加位置,需要在extern "C"声明范围内。同时将复制过来的驱动文件夹的头文件路径在KEIL中保存一下(点魔术棒设置)
9 ~+ m+ C8 G6 E7 P* t: e& c3 y3、去掉CubeMX错误添加的两个驱动
1 v0 c6 ^& P2 J0 r; o5 \exc7200.c 和ts3510.c,这两个文件没有用,反而导致编译错误。
( p6 x  K8 G; o: j 10.jpg " A2 r" C! D* ~) Z1 l4 Z
2 O3 z$ N0 g* M# `1 \# m7 Z
4、两个地方添加extern "C"声明! A* Y2 q1 I, ^/ U1 [% u
a、main.cpp 90行处2 g9 N. s) M8 W) n7 a% u3 Y* P1 Q
11.jpg " b! `2 U& O7 Z2 z% t! |

, e& d4 v* \& D: a4 j- `8 R7 ?b、BoardConfiguration.cpp 286行处
  m9 Y' G( Z$ _! F 12.jpg
' B9 ?) r; `: x
; [( l1 \6 n* W; c5、BoardConfiguration.cpp 第213行处
0 \: b; v3 y( u5 e( P  p: Hvoid LCD_Delay(uint32_t Delay)函数注释掉,与其他函数重复了& H, c3 A4 U5 r1 }3 J* N7 o

. i: ^% `7 X( r8 m9 p/ e6、STM32F4TouchController.cpp文件第21行,将系统注释掉的触摸初始化函数恢复0 p% N% V' Q' g3 O
BSP_TS_Init(LCD_GetXSize(), LCD_GetYSize());
; m) _, k" [) [$ C6 {9 d' N6 t2 `1 E. Z1 a& t3 I" S- S
7、STM32F4TouchController.cpp文件第32行,将系统注释掉的触摸数据获取代码恢复,同时注意将state.后面的x、y改为大写的X、Y(原定义为大写)( {5 ]/ o# q6 E1 l( i
if (state.TouchDetected)5 d* Z1 o7 Y" m( [  G
    {
, C0 S% M& H7 y        x = state.X;
1 Q1 j+ V8 z5 ~        y = state.Y;
; l" [, V( U. d3 l" N0 j        return true;7 ?3 a$ _3 p5 B$ ^! [
    }0 n( S$ V! {. y3 X

2 W4 Y: W7 k0 b( i# k. C至此,经过修改的项目大致可以通过编译了,可以试着编译一下,会出现一些警告,但是不会有错误。不过未能通过编译,请按上述步骤检查项目代码修改情况。# S. j! l0 A9 j) V/ _6 H
2 i# w% k0 |7 ^6 R$ O7 U) T) j% q
未完待续……
3 R+ ~$ T8 E2 Z( ?; ~; H# h
收藏 9 评论9 发布时间:2019-1-26 21:12

举报

9个回答
adm 回答时间:2019-1-26 21:44:20
续上节……; M' M4 M! s% J# c0 z* k$ A9 o
* o6 d  P0 l7 ~/ q$ N3 V
项目基本框架编译通过,只能说迈出了成功的第一步,如何把图形界面的各种控件和板子的各类外设联系起来,形成互动,才是我们想要实现的。这里以上一节教程的按钮1和按钮2为例,来实现分别控制板上的LED3和LED4,这是F429I Discovery开发板上预设的两个LED。
6 f4 Y9 U: N* v# N- h9 a/ ~7 h! e( Q上一节教程中,我在工作区页面里设置了6个按钮,其中按钮1和按钮2设置了点击事件,关联了两个事件驱动函数,这两个虚函数在generated文件夹下WorkSpaceViweBase.cpp中,WorkSpaceViweBase.hpp头文件里也有声明。* H6 F1 C/ A% O6 E/ \& r0 f
13.jpg ( C/ C7 f! q' c) ~7 @; G+ C+ r
不过这两个文件的内容我们不要动,按提示,在gui文件夹下的WorkSpaceViwe.hpp和WorkSpaceViwe.cpp中声名和定义这两个虚函数。如下图:, I$ d$ h8 }1 j- N
14.jpg ' y$ I! }  t5 N, u" n) |7 ^1 j
+ w! h! F  }% v/ _, p6 P8 \
15.jpg ) `  z( z/ T, F4 ~

; _; ^+ u  ~  I) A; s图上红框所示就是两个按钮点击事件函数,这两个函数调用板上的LED驱动函数,翻转相应LED的电平,从而实现LED随按钮的按动而开关。其他相关外设也可以按这个思路来驱动。至此,按钮应该可以控制板上的LED了,编译项目文件,烧入板子。经过好几分钟的耐心等待(电脑速度慢,没办法),终于预先设计的GUI界面在LCD上出现了,点击按钮1和按钮2,嗯,貌似有点动静,但是不能控制?仔细一想,原来板上的LED还作为板子LTDC行同步和场同步的指示,LCD刷新比较快,所以LED控制失常。找到行同步和场同步开关LED的地方,将相应的LED控制语句注释掉,具体位置在GPIO.cpp中,如下图所示:
  f! x$ t- K$ V' Z7 ^; Q1 i 16.jpg
$ L4 A3 C& m. w  D
: r; }& u+ t; l, j4 L1 g  B再次编译项目,烧录程序。真个世界都安静了,点击屏幕中的按钮,相应的LED依次点亮、熄灭。
% x5 L* S0 I* Z/ j/ W& i. ^0 a
) L; c) c/ o9 |' _, W# E9 l7 O' Z到这里,这个教程就真的结束了,希望能够起到抛砖引玉的效果,如果错误之处,还望告知,希望与大家一起学习,谢谢!( W9 w3 `& F! X. i

+ n& n/ F2 k& W7 r' o- a4 j' z
) Q1 o8 G" M( Q. Z$ p" O9 k* T2 _
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 ^; X. c' d7 ^7 D! J$ M1 F非常感谢!
adm 回答时间:2019-2-16 21:17:10
qq3531739406 发表于 2019-2-15 13:43! m" r. R, J* V- D# |) ^  m
你好,我现在使用的时STM32F469I DISCOVERY板,我现在学习使用TOUCHGFX。但是在CUBEMX配置完了之后,程序会 ...

& F) N- |3 g9 d! [- N( A你可以用CubeMX5创建一个F469I discovery板子的工程,CubeMX会提示你是否使用板子默认配置,选择Yes,这样就可以生成一个根据板子硬件的默认配置,在里面可以好好看看各种正确配置,最好记下来,以备以后使用。
shuai532209720 回答时间:2019-5-30 22:29:01
admvip 发表于 2019-2-16 21:17
/ l6 f$ a+ V8 `6 M你可以用CubeMX5创建一个F469I discovery板子的工程,CubeMX会提示你是否使用板子默认配置,选择Yes,这 ...

! T: n+ }- P" d: e2 ]3 Z" H您好,我这边用STM32F469I-discovery的开发板,采用的也是CubeMx5的默认配置,也添加了touchgfx的lib库,经过修改编译未报错,但下载进去之后,屏幕不亮,黑屏的状态。
wjjontheway 回答时间:2020-10-5 21:18:07
感谢楼主分享,正好手上有一块F429 Discovery的板子,希望通过楼主的分享能体验下TouchGFX

所属标签

相似分享

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