
刚接触TouchGFX几天,由于网上TouchGFX相关资料非常有限,填了n多的坑,终于在Discovery开发板上移植成功,为了帮助大家尽快熟悉TouchGFX,特整理了移植的过程,供大家参考,水平有限,错误难免,望大家见谅! 首先,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看不出来有什么变化)。 ![]() DMA2D 配置页面,设置颜色格式为RGB565( a; G5 O0 }4 } t ![]() LTDC配置页面,上面设置为RBG666,下面屏分辨率的参数按图设置' d9 M& Y' @0 } ![]() 图形选项如图所示,选择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 ![]() 在TouchGFX页面,在路径处填入TouchGFX设计器的文件路径,可通过右侧小黄文件夹找到。0 ]+ i" w/ Y# b 4 w) T5 M W2 z0 K9 k" V* k0 _ ![]() 在参数设置页面,按LTDC和SPI的接口,选择相应端口,如果不是Discovery板,需要根据实际接口选择,这一点很重要。 待以上设置都配置完成,写好项目名称、IDE软件类型以及生成项目的一些选项后,点右上角的GENERATE CODE按钮,生成TouchGFX项目文件。生成后先不要用KEIL或其他IDE打开项目,需要还回到CubeMX中,调用TouchGFX设计器进行图形界面设计。调用TouchGFX的进入点如下图红箭头所示,没有生成项目是,该按钮为灰色,项目生成后,该按钮就为有效的蓝色了。(图中我没有实际生成项目,故图标为灰色) ![]() 点击Execute进入TouchGFX设计器。, m6 d2 I o/ _0 |8 Y5 @. O ![]() 电脑速度慢,启动时间有点长。 ![]() 进入设计器后,利用左侧的各种控件,设计自己的GUI界面,该过程涉及素材搜集、界面配色、美化等,比较耗时,不过多讲解,这里设置了6个按钮,其中1、2按钮配置了点击事件,事件触发一个动作函数,在设计器里为两个按钮的动作函数命名,下来KEIL里编程需要用到。 界面编辑完成后,点保存,并点右上角按钮生成TouchGFX代码,如下图所示: ![]() - 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库都没有自动添加,实在想不通,只能自力更生,手动添加了。在项目文件夹下 \Middlewares\ST\TouchGFX\touchgfx\lib\core\cortex_m4f\Keil 目录中找到touchgfx_core.lib,在KEIL里添加进项目。 2、添加Discovery板的触摸驱动 到CubeMX5.0的F4固件库内找到CubeMX F4 discovery驱动夹复制到项目文件的BSP目录,然后添加如下两个需要的驱动文件到项目中。 stm32f429i_discovery.c和stm32f429i_discovery_ts.c,同时STM32F4TouchController.cpp开头,添加包含stm32f429i_discovery_ts.h的语句,注意添加位置,需要在extern "C"声明范围内。同时将复制过来的驱动文件夹的头文件路径在KEIL中保存一下(点魔术棒设置) 3、去掉CubeMX错误添加的两个驱动 exc7200.c 和ts3510.c,这两个文件没有用,反而导致编译错误。 ![]() . B- u. {' I0 r1 v 4、两个地方添加extern "C"声明; j" ^2 e4 k( [% j" f( M$ z a、main.cpp 90行处 ![]() b、BoardConfiguration.cpp 286行处1 y* U6 Q2 D! V0 [ ![]() & 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)函数注释掉,与其他函数重复了 6、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 7、STM32F4TouchController.cpp文件第32行,将系统注释掉的触摸数据获取代码恢复,同时注意将state.后面的x、y改为大写的X、Y(原定义为大写)0 ^- V1 U1 c) o# H) M5 t if (state.TouchDetected) { x = state.X;" d# }. Q5 P l2 v- m2 S. x9 s y = state.Y; return true;2 h, x1 T) U$ J5 a; o' E } 至此,经过修改的项目大致可以通过编译了,可以试着编译一下,会出现一些警告,但是不会有错误。不过未能通过编译,请按上述步骤检查项目代码修改情况。 n& j* j# [9 Z& b4 U3 `: l7 H: r 未完待续…… |
8 i& @& ~& `! e
项目基本框架编译通过,只能说迈出了成功的第一步,如何把图形界面的各种控件和板子的各类外设联系起来,形成互动,才是我们想要实现的。这里以上一节教程的按钮1和按钮2为例,来实现分别控制板上的LED3和LED4,这是F429I Discovery开发板上预设的两个LED。8 r( D( R* }$ H$ p: _
上一节教程中,我在工作区页面里设置了6个按钮,其中按钮1和按钮2设置了点击事件,关联了两个事件驱动函数,这两个虚函数在generated文件夹下WorkSpaceViweBase.cpp中,WorkSpaceViweBase.hpp头文件里也有声明。
不过这两个文件的内容我们不要动,按提示,在gui文件夹下的WorkSpaceViwe.hpp和WorkSpaceViwe.cpp中声名和定义这两个虚函数。如下图:7 ]0 g& L/ e: S P5 _
, M3 _7 A- X/ |: D, v* c3 O# i
图上红框所示就是两个按钮点击事件函数,这两个函数调用板上的LED驱动函数,翻转相应LED的电平,从而实现LED随按钮的按动而开关。其他相关外设也可以按这个思路来驱动。至此,按钮应该可以控制板上的LED了,编译项目文件,烧入板子。经过好几分钟的耐心等待(电脑速度慢,没办法),终于预先设计的GUI界面在LCD上出现了,点击按钮1和按钮2,嗯,貌似有点动静,但是不能控制?仔细一想,原来板上的LED还作为板子LTDC行同步和场同步的指示,LCD刷新比较快,所以LED控制失常。找到行同步和场同步开关LED的地方,将相应的LED控制语句注释掉,具体位置在GPIO.cpp中,如下图所示:
0 S" p, d# U' v2 `9 |9 p/ U% }+ h
再次编译项目,烧录程序。真个世界都安静了,点击屏幕中的按钮,相应的LED依次点亮、熄灭。
6 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
非常感谢!
你可以用CubeMX5创建一个F469I discovery板子的工程,CubeMX会提示你是否使用板子默认配置,选择Yes,这样就可以生成一个根据板子硬件的默认配置,在里面可以好好看看各种正确配置,最好记下来,以备以后使用。
您好,我这边用STM32F469I-discovery的开发板,采用的也是CubeMx5的默认配置,也添加了touchgfx的lib库,经过修改编译未报错,但下载进去之后,屏幕不亮,黑屏的状态。