【TouchGFX】使用CubeMX创建touchgfx项目 -- 初始篇
1、系统构成,黑色块表示组件非必须

2、环境准备
CubeMX:6.0.1
touchgfx:4.15.0
rt-thread:2020-8-14 commit
Keil:5.30
board:stm32f429igt6 + SDRAM-256Mb(16M x 16)+ SPI-FLASH-16MB + LCD-1024*600
3、打开CubeMX开始创建项目
3.1、安装软件包touchgfx最新版本4.15.0

3.2、系统时钟源RCC配置
3.3、系统调试口及时基SYS配置

3.4、配置SDRAM--W9825G6KH,电气参数及管脚配置

3.5、配置SPI-FLASH--W25Q128JVSQ

3.6、配置图形加速器 ChromART

3.7、显示LTDC接口配置



3.8、触摸芯片I2C接口配置

3.9、组件CRC激活,TouchGFX需要
3.10、加入freertos操作系统,目的是生成touchgfx与操作系统接口文件,方便移植rt-thread,参数配置保持默认即可

3.11、在附加软件管理器中选择TouchGFX用以生成其代码,并做相关配置


3.12、IO口配置,LCD复位、背光,FLASH片选,LED等

3.13、时钟树配置

3.14、生成工程

3.15、直接打开生成的Keil工程编译会报错,这是因为这些文件都是TouchGFX Designer生成,所以需要使用TouchGFX Designer 先生成代码

3.16、打开CubeMX生成的TouchGFX Designer模板工程,加入TEXT、BOX和BUTTON控件后生成touchgfx代码



3.17、再次编译Keil工程


4、补全工程,使之能运行起来
4.1、加入SDRAM配置代码
1 #define REFRESH_COUNT 636//1000//1755//636
2 #define SDRAM_TIMEOUT ((uint32_t)0xFFFF)
3 #define SDRAM_MODEREG_BURST_LENGTH_1 ((uint32_t)0x0000)
4 #define SDRAM_MODEREG_BURST_LENGTH_2 ((uint32_t)0x0001)
5 #define SDRAM_MODEREG_BURST_LENGTH_4 ((uint32_t)0x0002)
6 #define SDRAM_MODEREG_BURST_LENGTH_8 ((uint32_t)0x0004)
7 #define SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL ((uint32_t)0x0000)
8 #define SDRAM_MODEREG_BURST_TYPE_INTERLEAVED ((uint32_t)0x0008)
9 #define SDRAM_MODEREG_CAS_LATENCY_2 ((uint32_t)0x0020)
10 #define SDRAM_MODEREG_CAS_LATENCY_3 ((uint32_t)0x0030)
11 #define SDRAM_MODEREG_OPERATING_MODE_STANDARD ((uint32_t)0x0000)
12 #define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED ((uint32_t)0x0000)
13 #define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE ((uint32_t)0x0200)
14
15 /**
16 * @brief Programs the SDRAM device.
17 * @retval None
18 */
19 void MX_SDRAM_InitEx(void)
20 {
21 __IO uint32_t tmpmrd = 0;
22 FMC_SDRAM_CommandTypeDef Command;
23
24 /* Step 1: Configure a clock configuration enable command */
25 Command.CommandMode = FMC_SDRAM_CMD_CLK_ENABLE;
26 Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1;
27 Command.AutoRefreshNumber = 1;
28 Command.ModeRegisterDefinition = 0;
29
30 /* Send the command */
31 HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);
32
33 /* Step 2: Insert 100 us minimum delay */
34 /* Inserted delay is equal to 1 ms due to systick time base unit (ms) */
35 HAL_Delay(1);
36
37 /* Step 3: Configure a PALL (precharge all) command */
38 Command.CommandMode = FMC_SDRAM_CMD_PALL;
39 Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1;
40 Command.AutoRefreshNumber = 1;
41 Command.ModeRegisterDefinition = 0;
42
43 /* Send the command */
44 HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);
45
46 /* Step 4: Configure an Auto Refresh command */
47 Command.CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE;
48 Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1;
49 Command.AutoRefreshNumber = 8;
50 Command.ModeRegisterDefinition = 0;
51
52 /* Send the command */
53 HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);
54
55 /* Step 5: Program the external memory mode register */
56 tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1 | \
57 SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL | \
58 SDRAM_MODEREG_CAS_LATENCY_3 | \
59 SDRAM_MODEREG_OPERATING_MODE_STANDARD | \
60 SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;
61
62 Command.CommandMode = FMC_SDRAM_CMD_LOAD_MODE;
63 Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1;
64 Command.AutoRefreshNumber = 1;
65 Command.ModeRegisterDefinition = tmpmrd;
66
67 /* Send the command */
68 HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);
69
70 /* Step 6: Set the refresh rate counter */
71 /* Set the device refresh rate */
72 HAL_SDRAM_ProgramRefreshRate(&hsdram1, REFRESH_COUNT);
73 }
4.2、加入SPI-FLASH驱动
4.3、加入触摸驱动
5、FAQ
5.1、LTDC刷新频率过高导致的屏幕闪烁错位情况,相同硬件第一次设置25M工作正常,第二次25M就出现下面现象,修改为23M后工作正常,感觉会变很奇怪

5.2 、framebuffer过小导致的显示断屏错位,大小应该是分辨率×色深 (800×480×3) Byte



5.3、FT5436触摸IC获取第一点触摸Y坐标概率性负值,即MSB是1,须转为正值 ,可 & 0x7FFF,否则造成触摸间歇性失效,如 drag 效果达不到

【TouchGFX】使用CubeMX创建touchgfx项目 -- 初始篇的更多相关文章
- SSM 框架-04-使用maven创建web项目
SSM 框架-04-使用maven创建web项目 本篇介绍使用MAVEN来管理jar包,就不用一个一个去添加和下载jar包了,直接在maven配置文件中配置就可以了,maven可以帮助我们自动下载.本 ...
- 【SSRS】入门篇(一) -- 创建SSRS项目
原文:[SSRS]入门篇(一) -- 创建SSRS项目 在本篇中,您将学习如何在 SQL Server Data Tools (SSDT) 中创建报表服务器项目. 报表服务器项目用于创建在报表服务器中 ...
- eclipse弃坑记第一篇之在idea上配置Tomcat环境并创建Javaweb项目的详细步骤原创
IntelliJ IDEA是一款功能强大的开发工具,在代码自动提示.重构.J2EE支持.各类版本工具(如git.svn.github).maven等方面都有很好的应用. IntelliJ IDEA有免 ...
- BitAdminCore框架应用篇:(一)使用Cookiecutter创建应用项目
框架演示:http://bit.bitdao.cn 框架源码:https://github.com/chenyinxin/cookiecutter-bitadmin-core 一.简介 1.Coo ...
- Python Scrapy项目创建(基础普及篇)
在使用Scrapy开发爬虫时,通常需要创建一个Scrapy项目.通过如下命令即可创建 Scrapy 项目: scrapy startproject ZhipinSpider 在上面命令中,scrapy ...
- Android Studio开发第二篇创建新项目
创建新项目很简单,File-New-New Project,这个没什么好说的跟Eclipse都差不都. 第二步SDK选择,有手机平板还有Wear,TV,汽车Auto,谷歌眼镜等几个种平台,这里就先选择 ...
- Django基础篇 02- request常用属性和返回的响应类型、pycharm创建django项目
一.request常用属性 #django 请求对象里面的一些属性 print(request.method)#请求方式 print(request.body) #请求体 print(request. ...
- 使用Spring Boot和Gradle创建AngularJS项目
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的 ...
- 2.IntelliJ IDEA 2017创建JavaEE项目
转自:https://blog.csdn.net/qq_31628285/article/details/75139909?utm_source=blogxgwz0 IntelliJ IDEA 201 ...
- NetCore项目实战篇08---Docker挂载mysql并连接.netCoreWeb
我们的项目之前在直接连接的mysql,今天我们将通过docker挂载mysql 并与我们开发的webapi项目连接. 1. 安装docker 下载地址: https://download.docker ...
随机推荐
- struts2 Filter中无法转发请求
struts2 Filter中无法转发请求 项目升级struts2版本为最新以修复漏洞,由于一些历史原因,部分访问在升级后访问404,直接对历史代码改造代价太大. 于是使用拦截器对其转发.重定向,但是 ...
- MyBatis中使用#{}和${}占位符传递参数的各种报错信息处理
在Mapper层使@Select注解进行SQL语句查询时,往往需要进行参数传入和拼接,一般情况下使用两种占位符#{参数名}和${参数名},两者的区别为: 一.两种占位符的区别 1.参数传入方式的区别 ...
- 神经网络优化篇:详解指数加权平均数(Exponentially weighted averages)
指数加权平均数 比如这儿有去年伦敦的每日温度,所以1月1号,温度是40华氏度,相当于4摄氏度.世界上大部分地区使用摄氏度,但是美国使用华氏度.在1月2号是9摄氏度等等.在年中的时候,一年365天,年中 ...
- 【Python】人工智能-机器学习——不调库手撕贝叶斯分类问题
1. 作业内容描述 1.1 背景 数据集大小150 该数据有4个属性,分别如下 Sepal.Length:花萼长度(cm) Sepal.Width:花萼宽度单位(cm) Petal.Length:花瓣 ...
- LeetCode刷题(不断更新)
冲冲冲 125. 验证回文串 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A m ...
- 【DevCloud · 敏捷智库】如何利用核心概念解决估算常见问题(内附下载材料)
摘要:团队用于估算时间过多,留给开发的时间会相应减少,大家工作紧张,状态不佳.团队过度承诺直接造成迭代目标不能完成,士气低落.以上弊端直接伤害敏捷团队,是敏捷团队保持稳定健康节奏的阻力. 背景 敏捷江 ...
- 资源成本降低70%!华为MetaERP资产核算的Serverless架构实践
本文分享自华为云社区<资源成本降低70%!华为MetaERP资产核算的Serverless架构实践>,作者: 华为云PaaS服务小智. 资产核算是指在一定的财务周期,对企业拥有的房屋建筑物 ...
- 华为云推出全自研数据库,GaussDB(openGauss)能否撑起一片天?
摘要:GaussDB(openGauss) 基于华为云底座,能够快速全球化部署,同时支持用户的本地化部署诉求,跟云上生态工具紧密结合让用户在迁移.开发.运维上省时省心. GaussDB(openGau ...
- 一文带你了解两种Transformer文字识别方法
摘要:受Transformer模型的启发,目前一些学者将该结构应用到文本行识别中,以替代RNN,取得了良好的效果,如在HGA-STR和 SRN. 当前的文本行识别器为拥有更强的序列语义能力,模型多采用 ...
- 前端资源共享方案对比-笔记:iframe/JS-SDK/微前端
前端页面资源如何分享,常见的有iframe,其次是js-sdk.这两类的在地图类工具经常用.微前端是最佳比较火的方式.本篇是他们的对比分析. 下一篇讲 BK-VISION如何在让用户自由选择 ifra ...

