4.TouchGFX界面应用之STM32显示移植

2020-06-28来源: eefocus关键字:TouchGFX  界面应用  STM32  显示移植

TouchGFX前面几个教程都是在模拟器上跑都没有下到开发板子上过那就不好玩了啊,那我接下来将如何移植到stm32上面运行,我这里以非官方板为例。


我们使用的是STM32CubeMX软件生成我的版本是5.2,使用STM32F746IGT6为核心的开发板为Open746I-C:http://www.waveshare.net/shop/Open746I-C.htm,使用7寸电容触摸屏:http://www.waveshare.net/shop/7inch-Capacitive-Touch-LCD-F.htm 分辨率为1024×600。


先打开或者重新创建一个STM32CubeMX驱动LCD的工程。


开启一个TIM1为TouchGFX框架作为时基,这个开启时钟源来即可,下面的参数不需要设置,设置也没用或者反作用。

开启FMC为LCD 提供显存

开启DM2D

开启LCD 驱动器,设置好像素点和参数。

设置层数

开启LTDC和DM2D中断,这个很重要

开启CRC校验

开启FreeRTOS

开启GRAPHICS,选择TouchGFX ,检查参数是否正确

设置时基源为TM2。

设置好时钟。

在配置TouchGFX 前可以先去试一试LCD的硬件和软件是否有问题,如果没问题在进行下一步。如果不使用STM32CubeMX生成也可以,只需要保证LCD配置和FreeRTOS可以正常工作也可以,在中间加入这些文件是一样的。

生成代码,在STM32CubeMX工作目录下创建一个TouchGFX文件夹,将TouchGFX 工程放在进去

在TouchGFX 文件夹中如下

然后打开keil5工程编译,编译会报错,说函数没有定义。

然后把TouchGFXgenerated和TouchGFXgui文件夹下所有.cpp加载到工程中。

再把对应的头文件文件夹设置好,我这里但是系统默认设置好的,我只加了一个。

添加如下:

编译结束有一些没使用大图片的内存就够了,使用了大图片的内存就不够,哪怕图片只是加载到你的工程没有使用也不可以。

移除大图片后发现还有两个错误,这两个错误,找了一些发现有定义但是没有在头文件里面声明,导致编译器找不到,我们在main.h中声明这两个变量。

好编译过了下载板子试一试

ok,完美,哦不,,,触摸没有效果呀。

那我们加一个触摸,我们提前准备一个触摸程序,准备直接移植,我使用的是GT911触摸芯片,触摸屏支持5点触控,但是我们只使用一个点。

在STM32F7TouchController.cpp中有

void STM32F7TouchController::init()  //触摸屏初始化函数

bool STM32F7TouchController::sampleTouch(int32_t& x, int32_t& y) //触摸屏读取触摸点函数

两个函数,我们加入我们的程序进去。

然后编译下载,使用效果。

注意:不要让然触摸程序一直卡死等待,不然一样没有效果,可以适当添加串口打印数据,但是不要使用printf这个函数。不管你是否重定义了,都不要使用。如果想使用TouchGFX自带的一些GUI,然后下载程序却内存不够那就请使用QSPI扩展内存来实现。


如果你的是官方板选择对应的开发板下载好驱动,可以直接下载。

关键字:TouchGFX  界面应用  STM32  显示移植 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic501349.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:5.TouchGFX界面应用之多屏幕
下一篇:3.TouchGFX界面应用之按钮与响应

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

2.TouchGFX界面应用之Hello world
打开TouchGFX 4.10.0 Designer先选择开发板或者屏幕,移动鼠标到Simulator,会出现一个 CHANGE 按钮:打开如下图,如果你是ST官方板,那么你可以直接选择对应的开发板,如果你不是那选择对应分辨率的屏幕,我选择的是1024X600的屏幕。你可以选择一些UI,这些UI都带着一些有意思的图片和一些有意思的小东西,但是选择一些UI就意味着可能内存不够,我这里不选择,使用白板。还有管脚的路径,选择路径不能有中文和空格以及数字开头,选择好之后开始,第一次使用可能需要下载数据包。下图是主界面其中1:  主显示界面2:提供的组件(你也可以自定义组件)3:组件参数设置4:输出代码或者仿真我们先做一个做一个
发表于 2020-06-28
2.TouchGFX<font color='red'>界面</font><font color='red'>应用</font>之Hello world
3.TouchGFX界面应用之按钮与响应
上一节我们TouchGFX 添加了背景和文字显示,这次我们添加按键和按键动作,实现一个什么功能呢,那就再学习一个组件进度条,实现两个按键控制进度条。找到按钮,我使用两个带文字的按钮和任意找一个进度条修改按钮中间的值,我设置为80和20,另外为了区分两个按钮需要对两个按键取一个特别的名字,取名字要按照C语言函数命名规则,那就默认的名字后面加一个20把,另一个一样也是默认名字后面加一个80,那那个进度条叫什么呢,反正就一个就默认把,然后在右边interactions添加一个interaction(互动?)设置当20按钮被点击时候设置进度条值为20,同样在加一个互动设置当80按钮被点击时候设置进度条值为80设置好我们运行一下,鼠标点两个按
发表于 2020-06-28
3.TouchGFX<font color='red'>界面</font><font color='red'>应用</font>之按钮与响应
5.TouchGFX界面应用之多屏幕
这一节我们在TouchGFX可以创建多个界面,在组件的上面新建一个界面,同样先铺好背景。放置一个用于切换屏幕的按钮取个名字,在添加显示的文字设置互动,改变屏幕,切换到屏幕2 ,添加切换动画为幻灯片,切换方向东(上北下南,左西右东),这个动画也可以不加,如果你的屏幕比较大,显示出来的效果不是很好,显示有卡顿。当然你也可以超频来提高运行速度来解决这个问题。在屏幕二任意放一点东西,再放置一个回到屏幕1 的按钮。这个是自带的功能所以不需要修改任何代码,启动模拟器,查看功能是否有问题,如果没问题,添加到Keil工程,注意:添加屏幕,图片,字体等等都需要添加或者修改keil工程文件,不然编译会报错。编译如果报错看错误是什么,如果提示函数未定义
发表于 2020-06-28
5.TouchGFX<font color='red'>界面</font><font color='red'>应用</font>之多屏幕
6.TouchGFX界面应用之定时器机制
在TouchGFX有一个类似于滴答定时器的函数,handleTickEvent()。这一节我们使用handleTickEvent函数让图形动起来。在形状中找圆,设置圆画板大小为500X500,起点坐标为260,50,圆心在画板坐标的250,250,设置圆弧的开始角度和终止进度,设置圆弧的半径和圆弧线的宽度(0表示全部填充),这样这个圆弧就创建好了,我们再在圆弧的外面画一个完整的圆生成代码,在Screen2View.hpp的Screen2View中加入两个变量和handleTickEvent函数,声明这个函数后,在程序执行时,会自动定时调用或者函数。在Screen2View.cpp中定义这个函数,设置圆弧的开始和终止角度,每次加6度,
发表于 2020-06-28
6.TouchGFX<font color='red'>界面</font><font color='red'>应用</font>之定时器机制
7.TouchGFX界面应用多屏幕传参
上一节使用TouchGFX的handleTickEvent机制做了的计数器,但是有一个缺陷,在切换屏幕后再切换回来计数器归零了,如果我想这个计数器在任意时刻都在计数,哪怕切换的屏幕还是在计数。首先需要知道为什么计数器会归零,原因是TouchGFX使用的是MVP框架,在MVP框架中所有数据仅能保存在称为 Model 的类对象中,Presenter是视图(View)与Model之间的纽带,View只能通过Presenter来读取数据。这个框架可以在VC工程中可以看出。MVP框架所有需要保存的数据必须再Model 的类对象,我们之前说明的数据都是再View类里面,所以在切换屏幕后所有的数据全部丢失了。前面说了数据都是再View类切换屏幕后
发表于 2020-06-28
7.TouchGFX<font color='red'>界面</font><font color='red'>应用</font>多屏幕传参
关于STM32CubeMx printf重定向,及报错。"FILE" is undefined
PFP *//* USER CODE BEGIN 0 */PUTCHAR_PROTOTYPE{    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);    return ch;}/* USER CODE END 0 */ 这样写会报错"FILE" is undefined  添加头文件 stdio.h即可
发表于 2020-06-06
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved