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

F429I Discovery开发板TouchGFX CubeMX移植教程

[复制链接]
admvip 发布时间:2019-1-26 21:12
刚接触TouchGFX几天,由于网上TouchGFX相关资料非常有限,填了n多的坑,终于在Discovery开发板上移植成功,为了帮助大家尽快熟悉TouchGFX,特整理了移植的过程,供大家参考,水平有限,错误难免,望大家见谅!

首先,CubeMX5.0已经开始支持F4、F7系列的MCU使用TouchGFX了,最新的固件库里也有相关的例程,可以很方便的烧录到板子上,体会一下TouchGFX的强大图形效果,不过看过之后,自然想到的是自己如何也能够编写出华丽的图形界面,安耐不住内心的冲动,开始打开CubeMX开始配置项目。不过由于缺乏相关资料,这两天一路移植过来,遇到的坑,说起来都是泪,特写出来,希望大家以后能够绕道走,避免掉坑。
废话不说,进入正题。按照CubeMX的提示,选择F429I Discovery板,进入配置,根据提示,选择Discovery板默认配置,采用这个默认配置,基本上SDRAM、CRC、Tim、LED、I2C、SPI、LTDC等外设基本都根据板子配置好了,仅仅做一些简单修改即可。
具体几个需要配置修改的地方如下:
时钟设置为主频168M,最下面的LCD CLK设置为6-18M之间,过高就会花屏,过低刷新率就变低(实测6-18M看不出来有什么变化)。

1.jpg
DMA2D 配置页面,设置颜色格式为RGB565

2.jpg
LTDC配置页面,上面设置为RBG666,下面屏分辨率的参数按图设置

3.jpg
图形选项如图所示,选择TouchGFX和LTDC界面
分辨率和像素格式如图,选择240*320 RGB565

4.jpg
在TouchGFX页面,在路径处填入TouchGFX设计器的文件路径,可通过右侧小黄文件夹找到。

5.jpg
在参数设置页面,按LTDC和SPI的接口,选择相应端口,如果不是Discovery板,需要根据实际接口选择,这一点很重要。
待以上设置都配置完成,写好项目名称、IDE软件类型以及生成项目的一些选项后,点右上角的GENERATE CODE按钮,生成TouchGFX项目文件。生成后先不要用KEIL或其他IDE打开项目,需要还回到CubeMX中,调用TouchGFX设计器进行图形界面设计。调用TouchGFX的进入点如下图红箭头所示,没有生成项目是,该按钮为灰色,项目生成后,该按钮就为有效的蓝色了。(图中我没有实际生成项目,故图标为灰色)
6.jpg
点击Execute进入TouchGFX设计器。
7.jpg
电脑速度慢,启动时间有点长。

8.jpg
进入设计器后,利用左侧的各种控件,设计自己的GUI界面,该过程涉及素材搜集、界面配色、美化等,比较耗时,不过多讲解,这里设置了6个按钮,其中1、2按钮配置了点击事件,事件触发一个动作函数,在设计器里为两个按钮的动作函数命名,下来KEIL里编程需要用到。
界面编辑完成后,点保存,并点右上角按钮生成TouchGFX代码,如下图所示:
9.jpg



经过一段时间的等待,左下角提示栏提示代码生成完毕,即可关闭TouchGFX设计器,回到CubeMX中,再次点击CubeMX右上角的GENERATE CODE按钮,生成完整的包含刚才设计器里设计界面源码的TouchGFX项目文件。这时可以按提示用KEIL打开项目文件。
这时我们还要给CubeMX自动生成的项目文件查缺补漏,否则直接编译是通不过的。
1、为项目文件添加TouchGFX源码库
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,这两个文件没有用,反而导致编译错误。
10.jpg

4、两个地方添加extern "C"声明
a、main.cpp 90行处
11.jpg

b、BoardConfiguration.cpp 286行处
12.jpg

5、BoardConfiguration.cpp 第213行处
void LCD_Delay(uint32_t Delay)函数注释掉,与其他函数重复了

6、STM32F4TouchController.cpp文件第21行,将系统注释掉的触摸初始化函数恢复
BSP_TS_Init(LCD_GetXSize(), LCD_GetYSize());

7、STM32F4TouchController.cpp文件第32行,将系统注释掉的触摸数据获取代码恢复,同时注意将state.后面的x、y改为大写的X、Y(原定义为大写)
if (state.TouchDetected)
    {
        x = state.X;
        y = state.Y;
        return true;
    }

至此,经过修改的项目大致可以通过编译了,可以试着编译一下,会出现一些警告,但是不会有错误。不过未能通过编译,请按上述步骤检查项目代码修改情况。

未完待续……
收藏 9 评论9 发布时间:2019-1-26 21:12

举报

9个回答
admvip 回答时间:2019-1-26 21:44:20
续上节……

项目基本框架编译通过,只能说迈出了成功的第一步,如何把图形界面的各种控件和板子的各类外设联系起来,形成互动,才是我们想要实现的。这里以上一节教程的按钮1和按钮2为例,来实现分别控制板上的LED3和LED4,这是F429I Discovery开发板上预设的两个LED。
上一节教程中,我在工作区页面里设置了6个按钮,其中按钮1和按钮2设置了点击事件,关联了两个事件驱动函数,这两个虚函数在generated文件夹下WorkSpaceViweBase.cpp中,WorkSpaceViweBase.hpp头文件里也有声明。
13.jpg
不过这两个文件的内容我们不要动,按提示,在gui文件夹下的WorkSpaceViwe.hpp和WorkSpaceViwe.cpp中声名和定义这两个虚函数。如下图:
14.jpg

15.jpg

图上红框所示就是两个按钮点击事件函数,这两个函数调用板上的LED驱动函数,翻转相应LED的电平,从而实现LED随按钮的按动而开关。其他相关外设也可以按这个思路来驱动。至此,按钮应该可以控制板上的LED了,编译项目文件,烧入板子。经过好几分钟的耐心等待(电脑速度慢,没办法),终于预先设计的GUI界面在LCD上出现了,点击按钮1和按钮2,嗯,貌似有点动静,但是不能控制?仔细一想,原来板上的LED还作为板子LTDC行同步和场同步的指示,LCD刷新比较快,所以LED控制失常。找到行同步和场同步开关LED的地方,将相应的LED控制语句注释掉,具体位置在GPIO.cpp中,如下图所示:
16.jpg

再次编译项目,烧录程序。真个世界都安静了,点击屏幕中的按钮,相应的LED依次点亮、熄灭。

到这里,这个教程就真的结束了,希望能够起到抛砖引玉的效果,如果错误之处,还望告知,希望与大家一起学习,谢谢!



Kevin201707 回答时间:2019-1-27 10:58:28
非常赞,多谢啦!
yanhaijian 回答时间:2019-1-27 11:29:05
ST买下后相信会发展好。
strang 回答时间: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(),然后就会出错。我想请教一下,有什么原因造成这个问题。你有没有配置好可以用的基本程序。
非常感谢!
admvip 回答时间:2019-2-16 21:17:10
qq3531739406 发表于 2019-2-15 13:43
你好,我现在使用的时STM32F469I DISCOVERY板,我现在学习使用TOUCHGFX。但是在CUBEMX配置完了之后,程序会 ...

你可以用CubeMX5创建一个F469I discovery板子的工程,CubeMX会提示你是否使用板子默认配置,选择Yes,这样就可以生成一个根据板子硬件的默认配置,在里面可以好好看看各种正确配置,最好记下来,以备以后使用。
shuai532209720 回答时间:2019-5-30 22:29:01
admvip 发表于 2019-2-16 21:17
你可以用CubeMX5创建一个F469I discovery板子的工程,CubeMX会提示你是否使用板子默认配置,选择Yes,这 ...

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

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

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