001----手把手教你制作TouchGFX的工程模板
手把手教你制作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的工程模板相关推荐
- 手把手教你制作AppPreview视频并上传到appStore进行审核
手把手教你制作AppPreview视频并上传到appStore进行审核 注意,你需要使用iMovie才能够制作AppPreview视频文件,用QuickTime录制的无效! 最终效果 1. 新建一个事 ...
- 最新免费自建APP平台哪个好?手把手教你制作APP
大型二手交易网站咸鱼近日发布<90后分享经济消费报告>,报告显示:16-27岁的年轻人用户占比已达55%,90后已成为分享经济的绝对主力:基于地理位置或兴趣同好形成的社区"鱼塘& ...
- 手把手教你制作手机底部导航栏,领导看完都说好
手把手教你制作手机底部导航栏,领导看完都说好
- Android反编译:手把手教你制作高德地图车机共存版
Android反编译:手把手教你制作高德地图车机共存版 前言 前期准备 反编译流程 反编译获取有效信息 修改关键信息 修改包名 修改其它配置 生成APK 重新打包成apk 重新签名 绕过校验机制 定位 ...
- 天线巴伦制作和原理_【火腿DIY】巴伦知识图集|手把手教您制作1:1短波巴伦
洛阳市无线电运动协会 CQ<现代通讯>杂志官网 黑暗森林的博客 什么是巴伦?短波用巴伦的作用是什么? 巴伦(英文:Balun)是平衡Balanced和不平衡Unbalanced转换器的英文 ...
- PWA入门:手把手教你制作一个PWA应用
摘要: PWA图文教程 原文:PWA入门:手把手教你制作一个PWA应用 作者:MudOnTire Fundebug经授权转载,版权归原作者所有. 简介 Web前端的同学是否想过学习app开发,以弥补自 ...
- 怎么将自己的头像p到特定的背景图_【后期修图】photoshop手把手教你制作属于自己的酷炫的微信头像...
原标题:[后期修图]photoshop手把手教你制作属于自己的酷炫的微信头像 效果图先放上 1.新建一个白色的背景,这里是1080*720的.然后在图层面板下面单击创建新的调整图层/渐变,设 置 好渐 ...
- 手把手教你制作微信十周年专属勋章头像
本文图文手把手教你制作微信十周年专属勋章头像. 首先扫码打开"微信十年 时空隧道"小程序,微信浏览的长按可识别小程序码. 打开小程序后先不用操作,也不用担心以为中毒了乱刷屏
- 【对讲机的那点事】手把手教你制作馈线焊接M头
在无线电车载台,中继台的应用中,馈线的好坏直接影响电波能量的传输,但是,馈线两端连接机器和天线的接头,通常是需要我们自己焊接制作的. 今天小编就带你手把手教你手把手教你制作馈线焊接M头: 在HF频段和 ...
最新文章
- 嵌入式Web服务器移植
- 用脑机接口创作音乐,将音乐与思想进行合成
- drawable自定义字体颜色
- yarn资源管理调度平台
- 基于注解的Spring MVC(所需jar包,web.xml配置,Spring文件配置,@Controller,@RequestMapping,@RequestParam,model填参,EL取值)
- 求护士的心理阴影面积 | 今日最佳
- (转)页面滚动条(scrollbar)颜色设置详解
- python ^ 操作在两整数加法运算中的妙用
- Flex游戏篇——游戏开发概述
- Linux Pthread学习记录
- wiki搭建详细步骤
- 编程语言难度排名_谷歌排名第一的编程语言,小学生拿来做答题,分分钟钟搞定高难度算法!...
- SQLyog安装地址
- VCL界面控件DevExpress VCL发布v18.1.7|附下载
- CentOS yum方式升级内核kernel
- EZo UIBuilder中嵌入微博分享按钮【实例】
- matlab调用dyna,matlab调用ansysdyna及prepost
- 为什么汉语不能用来编程?
- 深入理解TCP三次握手与四次挥手过程以及抓包实验
- 将计算机系成绩置零,实验三数据更新操作_计算机软件及应用_IT计算机_专业资料...