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

F429I Discovery开发板TouchGFX CubeMX移植教程

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

4 |: r- S; M4 h3 d' G& o- \% b 3.jpg 6 R+ {) [! z: C5 C+ ]
图形选项如图所示,选择TouchGFX和LTDC界面
8 [8 M3 m) U2 j+ N) F6 K  Y分辨率和像素格式如图,选择240*320 RGB565% q9 C0 r/ {; b; b: {- g
% n) S2 R& h1 x: j9 ?6 g
4.jpg ! M3 Q7 M; \" ^; n6 R9 A. ^
在TouchGFX页面,在路径处填入TouchGFX设计器的文件路径,可通过右侧小黄文件夹找到。
1 C4 v2 x0 ~) x* x0 |8 B. p) R( c$ N1 Q# L, H! q
5.jpg
1 U. N5 A$ J  m  n& ]7 K在参数设置页面,按LTDC和SPI的接口,选择相应端口,如果不是Discovery板,需要根据实际接口选择,这一点很重要。
7 x, n+ P8 y+ d& u; [2 I1 L0 k% c7 H待以上设置都配置完成,写好项目名称、IDE软件类型以及生成项目的一些选项后,点右上角的GENERATE CODE按钮,生成TouchGFX项目文件。生成后先不要用KEIL或其他IDE打开项目,需要还回到CubeMX中,调用TouchGFX设计器进行图形界面设计。调用TouchGFX的进入点如下图红箭头所示,没有生成项目是,该按钮为灰色,项目生成后,该按钮就为有效的蓝色了。(图中我没有实际生成项目,故图标为灰色)
5 L4 |0 J, Z+ C9 z/ A* ]& K 6.jpg " l% V; ]/ M) s7 K( h( n5 a
点击Execute进入TouchGFX设计器。
5 S  [9 U0 K' a$ [+ n$ h+ Y 7.jpg
7 R1 A) l) K" m1 b" H电脑速度慢,启动时间有点长。7 t/ M5 Y& P6 @& o4 D. o. b
' v; ^/ K/ n, ~3 L
8.jpg
( S/ |& `; ?+ P2 e1 s) r' U1 S进入设计器后,利用左侧的各种控件,设计自己的GUI界面,该过程涉及素材搜集、界面配色、美化等,比较耗时,不过多讲解,这里设置了6个按钮,其中1、2按钮配置了点击事件,事件触发一个动作函数,在设计器里为两个按钮的动作函数命名,下来KEIL里编程需要用到。
# H7 t; H0 x( I) ]界面编辑完成后,点保存,并点右上角按钮生成TouchGFX代码,如下图所示:& z2 U! D8 j  x# [) r  e
9.jpg
1 V1 F2 M$ ~$ ?3 `4 m. }$ f( X: S) A

3 ~, U5 j  d% |2 L# P
2 R' _6 g/ p& u# o/ N/ M经过一段时间的等待,左下角提示栏提示代码生成完毕,即可关闭TouchGFX设计器,回到CubeMX中,再次点击CubeMX右上角的GENERATE CODE按钮,生成完整的包含刚才设计器里设计界面源码的TouchGFX项目文件。这时可以按提示用KEIL打开项目文件。
* ~5 j/ H! x" Y$ ?2 x! J这时我们还要给CubeMX自动生成的项目文件查缺补漏,否则直接编译是通不过的。7 Q; B- B; O6 j1 G
1、为项目文件添加TouchGFX源码库* p. o( h. L8 M  n& r
CubeMX生成的TouchGFX项目,竟然连TouchGFX的lib库都没有自动添加,实在想不通,只能自力更生,手动添加了。在项目文件夹下3 v3 @5 _  k+ \, p
\Middlewares\ST\TouchGFX\touchgfx\lib\core\cortex_m4f\Keil 目录中找到touchgfx_core.lib,在KEIL里添加进项目。
5 Z- V3 c% [, a, L" d$ @2、添加Discovery板的触摸驱动& ^! T! D" J6 `8 g% c
到CubeMX5.0的F4固件库内找到CubeMX F4 discovery驱动夹复制到项目文件的BSP目录,然后添加如下两个需要的驱动文件到项目中。
7 Q7 t7 y8 c3 t3 V2 N: kstm32f429i_discovery.c和stm32f429i_discovery_ts.c,同时STM32F4TouchController.cpp开头,添加包含stm32f429i_discovery_ts.h的语句,注意添加位置,需要在extern "C"声明范围内。同时将复制过来的驱动文件夹的头文件路径在KEIL中保存一下(点魔术棒设置)
* `/ p. I3 W- A+ G  Z* A3、去掉CubeMX错误添加的两个驱动" w" y, }) |, b( i- y, R9 q
exc7200.c 和ts3510.c,这两个文件没有用,反而导致编译错误。
9 S( V5 d+ [4 e 10.jpg
6 z) J$ m2 D, W( G. n
& v3 c0 \) `7 |& @0 O3 @4 i4、两个地方添加extern "C"声明
- T/ e6 |8 q. |6 ?' B! p% ]9 fa、main.cpp 90行处8 b" }! a: C! g8 A9 K- X( J, `
11.jpg
& o) n. A3 q9 g# [9 s! J7 `5 |9 w" ?' D8 M
b、BoardConfiguration.cpp 286行处
9 `) i$ f2 v. j# L. }( Y 12.jpg 0 i8 H' L) ~, H0 ~+ d) z4 n9 H  Y

/ h  l: C5 [; T1 Q, A5、BoardConfiguration.cpp 第213行处
0 B3 J- ?0 A# R# G3 A+ U% F) `void LCD_Delay(uint32_t Delay)函数注释掉,与其他函数重复了
' E6 [8 _& t% F' j5 y- @. z+ v3 n& w- F. n) d5 e, M$ v7 i
6、STM32F4TouchController.cpp文件第21行,将系统注释掉的触摸初始化函数恢复2 r# h% I1 P2 a7 D$ t2 L6 L& h
BSP_TS_Init(LCD_GetXSize(), LCD_GetYSize());
0 S" ?: n: ~2 g! v7 o7 x  X6 c6 R- r" H0 F6 q1 R- r0 E
7、STM32F4TouchController.cpp文件第32行,将系统注释掉的触摸数据获取代码恢复,同时注意将state.后面的x、y改为大写的X、Y(原定义为大写)
4 q. h$ h4 b. {5 r, v7 v5 qif (state.TouchDetected)- u$ s) {8 T- A) _5 a0 j
    {! ~+ U" n2 \" s- Q( z. r
        x = state.X;+ q8 W; ^( r5 q# @2 {- x! o+ `
        y = state.Y;" P4 L; R$ H3 j: n
        return true;
" R% d6 \7 U" H$ d) B! e    }
& v) y3 C. M. A+ J. J& O' o6 G: D; u" o% @' A) a- a2 C
至此,经过修改的项目大致可以通过编译了,可以试着编译一下,会出现一些警告,但是不会有错误。不过未能通过编译,请按上述步骤检查项目代码修改情况。% c! v6 a7 c; @
* ~: C, B. V9 a6 i8 v, U
未完待续……6 y4 y  i/ @! N
收藏 9 评论9 发布时间:2019-1-26 21:12

举报

9个回答
adm 回答时间:2019-1-26 21:44:20
续上节……
9 o" e6 T0 V1 S- r2 C8 k6 c/ A# S
6 _1 \6 I9 [& G7 w; X0 M: R: x项目基本框架编译通过,只能说迈出了成功的第一步,如何把图形界面的各种控件和板子的各类外设联系起来,形成互动,才是我们想要实现的。这里以上一节教程的按钮1和按钮2为例,来实现分别控制板上的LED3和LED4,这是F429I Discovery开发板上预设的两个LED。0 {3 b- T- a( ?* v5 D
上一节教程中,我在工作区页面里设置了6个按钮,其中按钮1和按钮2设置了点击事件,关联了两个事件驱动函数,这两个虚函数在generated文件夹下WorkSpaceViweBase.cpp中,WorkSpaceViweBase.hpp头文件里也有声明。
5 a1 @3 D0 n$ }1 J 13.jpg
( }. |( K1 Y1 L不过这两个文件的内容我们不要动,按提示,在gui文件夹下的WorkSpaceViwe.hpp和WorkSpaceViwe.cpp中声名和定义这两个虚函数。如下图:
9 a. X& _4 S7 I; _  d" r3 H 14.jpg / B" ]+ K. G3 A5 f$ v# h

  f- ~. q. D9 C' X4 G; k 15.jpg
2 @2 t9 `; Q( i
2 K* j8 \: E- d: N5 f1 ?图上红框所示就是两个按钮点击事件函数,这两个函数调用板上的LED驱动函数,翻转相应LED的电平,从而实现LED随按钮的按动而开关。其他相关外设也可以按这个思路来驱动。至此,按钮应该可以控制板上的LED了,编译项目文件,烧入板子。经过好几分钟的耐心等待(电脑速度慢,没办法),终于预先设计的GUI界面在LCD上出现了,点击按钮1和按钮2,嗯,貌似有点动静,但是不能控制?仔细一想,原来板上的LED还作为板子LTDC行同步和场同步的指示,LCD刷新比较快,所以LED控制失常。找到行同步和场同步开关LED的地方,将相应的LED控制语句注释掉,具体位置在GPIO.cpp中,如下图所示:- q1 i1 w' k3 D# ]7 I
16.jpg ( v6 P- g6 P( g; b# U
0 N) Y! j) [( v2 C' V2 V
再次编译项目,烧录程序。真个世界都安静了,点击屏幕中的按钮,相应的LED依次点亮、熄灭。
. Y4 u! F0 o" C5 J- G( P5 s0 q$ t" ~6 g2 u1 B$ B, I# O+ X6 ~& W4 z$ M
到这里,这个教程就真的结束了,希望能够起到抛砖引玉的效果,如果错误之处,还望告知,希望与大家一起学习,谢谢!9 b* [- B, U# E% m& b
  \1 C6 J: o( W# {! K0 \8 z

- l8 m: M3 i, V
- [* b+ G- ^# M; m/ Y4 A
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(),然后就会出错。我想请教一下,有什么原因造成这个问题。你有没有配置好可以用的基本程序。
, `- g& i: Z& x0 J( ]* Z非常感谢!
adm 回答时间:2019-2-16 21:17:10
qq3531739406 发表于 2019-2-15 13:43& M2 b/ {# W6 x& w
你好,我现在使用的时STM32F469I DISCOVERY板,我现在学习使用TOUCHGFX。但是在CUBEMX配置完了之后,程序会 ...

1 Y5 x1 m" p6 |# C你可以用CubeMX5创建一个F469I discovery板子的工程,CubeMX会提示你是否使用板子默认配置,选择Yes,这样就可以生成一个根据板子硬件的默认配置,在里面可以好好看看各种正确配置,最好记下来,以备以后使用。
shuai532209720 回答时间:2019-5-30 22:29:01
admvip 发表于 2019-2-16 21:17
/ r2 e6 j& \. y  {8 ?( b你可以用CubeMX5创建一个F469I discovery板子的工程,CubeMX会提示你是否使用板子默认配置,选择Yes,这 ...
4 x9 A& @7 T& J1 l
您好,我这边用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 手机版