手把手教你制作TouchGFX的工程模板

开发环境:CubeMX5.6.1(packages–F4–1.25.0)、Keil5(5.30.0.0–Keil.STM32F4xx_DFP.2.9.0)、Touch GFX(Version4.13.0)
硬件开发板平台:野火STM32F429IG-V2
液晶显示屏型号:野火GT-917S、分辨率800x480

第1步:打开Cube MX软件

第2步:新建工程

第3步:选择自己使用的芯片并开始工程配置

第4步:开启仿真接口

第5步:选择外部高速时钟HSE

第6步:选择触摸屏对应得IIC通讯得接口和配置(一般默认)

第6步:选择并配置触摸屏得中断引脚、RST引脚和液晶的背光引脚

第6步:开启触摸屏的中断引脚的NVIC

第7步:开启并配置使用FMC通讯的SDRAM

第7步:开启SDRAM的中断功能


第8步:开启DM2D(一般默认)

第8步:开启DM2D的中断功能

第9步:开启并配置LTDC层级参数

第9步:配置LTDC的液晶显示参数

第9步:开启LTDC的中断使能

第9步:配置LTDC的引脚

第10步:配置系统时钟和LTDC时钟

第11步:配置USART串行通讯(为方便调试和使用打印函数printf();)

第12步:下载并加载Touch GFX功能

第13步:开启并配置Touch GFX

第14步:开启CRC

第15步:填写工程名、选择存储路径、编译软件环境和堆栈的大小设置

第16步:选择.c .h文件分开单独生成(个人习惯)

第17步:点击生成代码工程文件

第18步:添加触摸屏驱动程序文件

第19步:新建BSP组添加BSP文件到编译软件中

第20步:添加BSP文件的头文件路径到工程中

第21步:添加usart.c中的代码实现串口打印功能

//【注意添加头文件】
#include "stdio.h"
///重定向c库函数printf到串口DEBUG_USART,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{/* 发送一个字节数据到串口DEBUG_USART */HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);    return (ch);
}///重定向c库函数scanf到串口DEBUG_USART,重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{int ch;HAL_UART_Receive(&huart1, (uint8_t *)&ch, 1, 1000); return (ch);
}

第22步:在fmc.c中添加SDRAM的初始化代码

//【注意:在 int main()的初始化中加这个初始化SDRAM:SDRAM_InitSequence();】
static FMC_SDRAM_CommandTypeDef Command;/*** @brief  延迟一段时间* @param  延迟的时间长度* @retval None*/
static void SDRAM_delay(__IO uint32_t nCount)
{__IO uint32_t index = 0; for(index = (100000 * nCount); index != 0; index--){}
}/*** @brief  对SDRAM芯片进行初始化配置* @param  None. * @retval None.*/
void SDRAM_InitSequence(void)
{uint32_t tmpr = 0;/* Step 3 --------------------------------------------------------------------*//* 配置命令:开启提供给SDRAM的时钟 */Command.CommandMode = FMC_SDRAM_CMD_CLK_ENABLE;Command.CommandTarget = FMC_COMMAND_TARGET_BANK;Command.AutoRefreshNumber = 1;Command.ModeRegisterDefinition = 0;
/* Send the command */HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT);/* Step 2: Insert 100 us minimum delay */ /* Inserted delay is equal to 1 ms due to systick time base unit (ms) */SDRAM_delay(1);/* Step 5 --------------------------------------------------------------------*//* 配置命令:对所有的bank预充电 */ Command.CommandMode = FMC_SDRAM_CMD_PALL;Command.CommandTarget = FMC_COMMAND_TARGET_BANK;Command.AutoRefreshNumber = 1;Command.ModeRegisterDefinition = 0;
/* Send the command */HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT);   /* Step 6 --------------------------------------------------------------------*//* 配置命令:自动刷新 */   Command.CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE;Command.CommandTarget = FMC_COMMAND_TARGET_BANK;Command.AutoRefreshNumber = 4;Command.ModeRegisterDefinition = 0;/* Send the command */HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT);/* Step 7 --------------------------------------------------------------------*//* 设置sdram寄存器配置 */tmpr = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_2          |SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL   |SDRAM_MODEREG_CAS_LATENCY_3           |SDRAM_MODEREG_OPERATING_MODE_STANDARD |SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;/* 配置命令:设置SDRAM寄存器 */Command.CommandMode = FMC_SDRAM_CMD_LOAD_MODE;Command.CommandTarget = FMC_COMMAND_TARGET_BANK;Command.AutoRefreshNumber = 1;Command.ModeRegisterDefinition = tmpr;/* Send the command */HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT);/* Step 8 --------------------------------------------------------------------*//* 设置刷新计数器 *//*刷新速率 = (COUNT + 1) x SDRAM 频率时钟COUNT =( SDRAM 刷新周期/行数) - 20*//* 64ms/8192=7.813us  (7.813 us x FSDCLK) - 20 =683 */HAL_SDRAM_ProgramRefreshRate(&sdramHandle, 683);
//  FMC_SetRefreshCount(1386);
//  /* 发送上述命令*/
//  while(FMC_GetFlagStatus(FMC_BANK_SDRAM, FMC_FLAG_Busy) != RESET)
//  {
//  }
}

第23步:在fmc.h中添加SDRAM用到的宏定义


#define IS42S16400J_SIZE     (32 * 1024 * 1024)    //,32M字节/*SDRAM 的bank选择*/
#define FMC_BANK_SDRAM              FMC_Bank2_SDRAM
#define FMC_COMMAND_TARGET_BANK     FMC_SDRAM_CMD_TARGET_BANK2
#define sdramHandle hsdram1
#define SDRAM_TIMEOUT               ((uint32_t)0xFFFF)
#define SDRAM_BANK_ADDR             ((uint32_t)0xD0000000)/*** @brief  FMC SDRAM 模式配置的寄存器相关定义*/
#define SDRAM_MODEREG_BURST_LENGTH_1             ((uint16_t)0x0000)
#define SDRAM_MODEREG_BURST_LENGTH_2             ((uint16_t)0x0001)
#define SDRAM_MODEREG_BURST_LENGTH_4             ((uint16_t)0x0002)
#define SDRAM_MODEREG_BURST_LENGTH_8             ((uint16_t)0x0004)
#define SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL      ((uint16_t)0x0000)
#define SDRAM_MODEREG_BURST_TYPE_INTERLEAVED     ((uint16_t)0x0008)
#define SDRAM_MODEREG_CAS_LATENCY_2              ((uint16_t)0x0020)
#define SDRAM_MODEREG_CAS_LATENCY_3              ((uint16_t)0x0030)
#define SDRAM_MODEREG_OPERATING_MODE_STANDARD    ((uint16_t)0x0000)
#define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED ((uint16_t)0x0000)
#define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE     ((uint16_t)0x0200) void SDRAM_InitSequence(void);

第24步:在stm32f4xx_it.c中添加触摸屏中断读数据代码

#include "bsp_i2c_touch.h"
extern void GTP_TouchProcess(void);void EXTI15_10_IRQHandler(void)
{/* USER CODE BEGIN EXTI15_10_IRQn 0 */if(__HAL_GPIO_EXTI_GET_IT(GTP_INT_GPIO_PIN) != RESET) //确保是否产生了EXTI Line中断{//HAL_GPIO_TogglePin(GPIOH,GPIO_PIN_12);//LED2_TOGGLE;GTP_TouchProcess();    __HAL_GPIO_EXTI_CLEAR_IT(GTP_INT_GPIO_PIN);     //清除中断标志位} /* USER CODE END EXTI15_10_IRQn 0 */HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);/* USER CODE BEGIN EXTI15_10_IRQn 1 *//* USER CODE END EXTI15_10_IRQn 1 */
}

第25步:在Touch GFX中添加触摸数据获取接口代码

extern "C"
{#include "stdio.h"#include "gt9xx.h"extern int16_t pre_x;extern int16_t pre_y;
}void STM32TouchController::init()
{/*** Initialize touch controller and driver**/GTP_Init_Panel();
}bool STM32TouchController::sampleTouch(int32_t& x, int32_t& y)
{/*** By default sampleTouch returns false,* return true if a touch has been detected, otherwise false.** Coordinates are passed to the caller by reference by x and y.** This function is called by the TouchGFX framework.* By default sampleTouch is called every tick, this can be adjusted by HAL::setTouchSampleRate(int8_t);**/GTP_TouchProcess();if(pre_x == -1 && pre_y == -1){return false;}else{x = pre_x;y = pre_y;return true;}
}

第26步:主函数main.c中添加的函数,也可以在GFX的初始化中进行添加

#include "bsp_i2c_touch.h"
#include "gt9xx.h"
#include "stdio.h"int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_CRC_Init();MX_DMA2D_Init();MX_FMC_Init();MX_I2C2_Init();MX_LTDC_Init();MX_USART1_UART_Init();MX_TouchGFX_Init();/* USER CODE BEGIN 2 */
SDRAM_InitSequence();/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE */MX_TouchGFX_Process();/* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

第27步:打开Touch GFX开始尽情的发挥想象设计吧 哈哈哈哈

第28步:选择空白模板进行设计

第29步:添加背景Box控件

第30步:添加一个按钮控件

对啦!本人能力有限哈!文中有啥讲错 的地方,还请留言指正哈!

001----手把手教你制作TouchGFX的工程模板相关推荐

  1. 手把手教你制作AppPreview视频并上传到appStore进行审核

    手把手教你制作AppPreview视频并上传到appStore进行审核 注意,你需要使用iMovie才能够制作AppPreview视频文件,用QuickTime录制的无效! 最终效果 1. 新建一个事 ...

  2. 最新免费自建APP平台哪个好?手把手教你制作APP

    大型二手交易网站咸鱼近日发布<90后分享经济消费报告>,报告显示:16-27岁的年轻人用户占比已达55%,90后已成为分享经济的绝对主力:基于地理位置或兴趣同好形成的社区"鱼塘& ...

  3. 手把手教你制作手机底部导航栏,领导看完都说好

    手把手教你制作手机底部导航栏,领导看完都说好

  4. Android反编译:手把手教你制作高德地图车机共存版

    Android反编译:手把手教你制作高德地图车机共存版 前言 前期准备 反编译流程 反编译获取有效信息 修改关键信息 修改包名 修改其它配置 生成APK 重新打包成apk 重新签名 绕过校验机制 定位 ...

  5. 天线巴伦制作和原理_【火腿DIY】巴伦知识图集|手把手教您制作1:1短波巴伦

    洛阳市无线电运动协会 CQ<现代通讯>杂志官网 黑暗森林的博客 什么是巴伦?短波用巴伦的作用是什么? 巴伦(英文:Balun)是平衡Balanced和不平衡Unbalanced转换器的英文 ...

  6. PWA入门:手把手教你制作一个PWA应用

    摘要: PWA图文教程 原文:PWA入门:手把手教你制作一个PWA应用 作者:MudOnTire Fundebug经授权转载,版权归原作者所有. 简介 Web前端的同学是否想过学习app开发,以弥补自 ...

  7. 怎么将自己的头像p到特定的背景图_【后期修图】photoshop手把手教你制作属于自己的酷炫的微信头像...

    原标题:[后期修图]photoshop手把手教你制作属于自己的酷炫的微信头像 效果图先放上 1.新建一个白色的背景,这里是1080*720的.然后在图层面板下面单击创建新的调整图层/渐变,设 置 好渐 ...

  8. 手把手教你制作微信十周年专属勋章头像

    本文图文手把手教你制作微信十周年专属勋章头像. 首先扫码打开"微信十年 时空隧道"小程序,微信浏览的长按可识别小程序码. 打开小程序后先不用操作,也不用担心以为中毒了乱刷屏

  9. 【对讲机的那点事】手把手教你制作馈线焊接M头

    在无线电车载台,中继台的应用中,馈线的好坏直接影响电波能量的传输,但是,馈线两端连接机器和天线的接头,通常是需要我们自己焊接制作的. 今天小编就带你手把手教你手把手教你制作馈线焊接M头: 在HF频段和 ...

最新文章

  1. 嵌入式Web服务器移植
  2. 用脑机接口创作音乐,将音乐与思想进行合成
  3. drawable自定义字体颜色
  4. yarn资源管理调度平台
  5. 基于注解的Spring MVC(所需jar包,web.xml配置,Spring文件配置,@Controller,@RequestMapping,@RequestParam,model填参,EL取值)
  6. 求护士的心理阴影面积 | 今日最佳
  7. (转)页面滚动条(scrollbar)颜色设置详解
  8. python ^ 操作在两整数加法运算中的妙用
  9. Flex游戏篇——游戏开发概述
  10. Linux Pthread学习记录
  11. wiki搭建详细步骤
  12. 编程语言难度排名_谷歌排名第一的编程语言,小学生拿来做答题,分分钟钟搞定高难度算法!...
  13. SQLyog安装地址
  14. VCL界面控件DevExpress VCL发布v18.1.7|附下载
  15. CentOS yum方式升级内核kernel
  16. EZo UIBuilder中嵌入微博分享按钮【实例】
  17. matlab调用dyna,matlab调用ansysdyna及prepost
  18. 为什么汉语不能用来编程?
  19. 深入理解TCP三次握手与四次挥手过程以及抓包实验
  20. 将计算机系成绩置零,实验三数据更新操作_计算机软件及应用_IT计算机_专业资料...

热门文章

  1. k8s-deployment-5
  2. ACM--津津的储蓄计划
  3. eclipse不能运行java程序吗_eclipse打开不能运行Java程序怎么回事啊?
  4. [转载]将Excel中的图片URL地址转成图片文件
  5. 移动应用开发实践-Task5-通过Json获取城市列表
  6. php数据映射到echarts中国地图
  7. MySQL 数据库如何存储时间
  8. 两物体的相对速度公式_为什么以光速相向飞行的两物体的相对速度不是2C?相对论还适用?...
  9. 根据当前日期求取当年是否为闰年,当天是周几。
  10. 把话说清楚的万能公式