touchGFX综合学习十四、基于cubeMX、正点原子H750开发版、RGB4.3寸屏移植touchGFX完整教程+工程(二)

本文主要是介绍touchGFX综合学习十四、基于cubeMX、正点原子H750开发版、RGB4.3寸屏移植touchGFX完整教程+工程(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、软件安装及CubeMX配置

请参考我这篇博文:touchGFX综合学习十三、基于cubeMX、正点原子H750开发版、RGB4.3寸屏移植touchGFX完整教程+工程(一)

二、touchGFX Designer生成代码

打开上一篇生成工程目录
在这里插入图片描述
双击打开
添加一个BOX控件并且充满屏幕,颜色改为红色
在这里插入图片描述
点击生成
在这里插入图片描述
如果生成失败,多生成几次
在这里插入图片描述

三、代码修改

1、SDRAM部分修改

SDRAM需要初始化相关参数,所以要加入SDRAM初始化部分
在这里插入图片描述
函数部分
在这里插入图片描述

u8 SDRAM_Send_Cmd(u8 bankx,u8 cmd,u8 refresh,u16 regval)
{u32 target_bank=0;FMC_SDRAM_CommandTypeDef Command;if(bankx==0) target_bank=FMC_SDRAM_CMD_TARGET_BANK1;       else if(bankx==1) target_bank=FMC_SDRAM_CMD_TARGET_BANK2;   Command.CommandMode=cmd;                //命令Command.CommandTarget=target_bank;      //目标SDRAM存储区域Command.AutoRefreshNumber=refresh;      //自刷新次数Command.ModeRegisterDefinition=regval;  //要写入模式寄存器的值if(HAL_SDRAM_SendCommand(&hsdram1,&Command,0XFFFF)==HAL_OK) //向SDRAM发送命令{return 0;  }else return 1;    
}
void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram)
{u32 temp=0;//SDRAM控制器初始化完成以后还需要按照如下顺序初始化SDRAMSDRAM_Send_Cmd(0,FMC_SDRAM_CMD_CLK_ENABLE,1,0); //时钟配置使能HAL_Delay(1);                                  //至少延时200usSDRAM_Send_Cmd(0,FMC_SDRAM_CMD_PALL,1,0);       //对所有存储区预充电SDRAM_Send_Cmd(0,FMC_SDRAM_CMD_AUTOREFRESH_MODE,8,0);//设置自刷新次数 //配置模式寄存器,SDRAM的bit0~bit2为指定突发访问的长度,//bit3为指定突发访问的类型,bit4~bit6为CAS值,bit7和bit8为运行模式//bit9为指定的写突发模式,bit10和bit11位保留位temp=(u32)SDRAM_MODEREG_BURST_LENGTH_4          |	//设置突发长度:1(可以是1/2/4/8)SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL   |	//设置突发类型:连续(可以是连续/交错)SDRAM_MODEREG_CAS_LATENCY_2           |	//设置CAS值:2(可以是2/3)SDRAM_MODEREG_OPERATING_MODE_STANDARD |   //设置操作模式:0,标准模式SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;     //设置突发写模式:1,单点访问SDRAM_Send_Cmd(0,FMC_SDRAM_CMD_LOAD_MODE,1,temp);   //设置SDRAM的模式寄存器//刷新频率计数器(以SDCLK频率计数),计算方法://COUNT=SDRAM刷新周期/行数-20=SDRAM刷新周期(us)*SDCLK频率(Mhz)/行数//我们使用的SDRAM刷新周期为64ms,SDCLK=200/2=100Mhz,行数为8192(2^13).//所以,COUNT=64*1000*100/8192-20=677HAL_SDRAM_ProgramRefreshRate(&hsdram1,677);	
}	
/* USER CODE END 0 */

四、工程烧录验证

使用keil编译工程烧录进开发版,查看屏幕显示:显示一片红色为正常
在这里插入图片描述

五、添加触摸

下载H750正点原子开发版资料

1、添加文件

Drivers文件夹下新建Bsp文件夹,将正点原子资料里面的TOUCH文件夹拷贝进来,用keil5打开工程将ctiic.c和gt9147.c添加到工程,并添加头文件支持。
在这里插入图片描述
Drivers文件夹下新建Sys文件夹,将正点原子资料里面的delay和sys文件夹拷贝进来,用keil5打开工程将delay.c和sys.c添加到工程,并添加头文件支持。
在这里插入图片描述

2、代码修改

1、修改添加进来的所有头文件,添加c++支持

举个例子
在这里插入图片描述
主要是添加

#ifdef __cplusplus
extern "C"
{
#endif
...........
省略
...........#ifdef __cplusplus
}
#endif

记得所有添加进来的文件都要修改哦

2、修改delay_us函数

在这里插入图片描述

//注意:nus的值不要大于1000us
void delay_us(u32 nus)
{		
//	u32 ticks;
//	u32 told,tnow,tcnt=0;
//	u32 reload=SysTick->LOAD;				//LOAD的值	    	 
//	ticks=nus*fac_us; 						//需要的节拍数 
//	told=SysTick->VAL;        				//刚进入时的计数器值
//	while(1)
//	{
//		tnow=SysTick->VAL;	
//		if(tnow!=told)
//		{	    
//			if(tnow<told)tcnt+=told-tnow;	//这里注意一下SYSTICK是一个递减的计数器就可以了.
//			else tcnt+=reload-tnow+told;	    
//			told=tnow;
//			if(tcnt>=ticks)break;			//时间超过/等于要延迟的时间,则退出.
//		}  
//	};u8 i=10*nus;while(i--);
}
//延时nms
//nms:要延时的ms数
void delay_ms(u16 nms)
{u32 i;for(i=0;i<nms;i++) delay_us(1000);
}

3、修改ctiic.c文件

在这里插入图片描述

4、修改GT9147_Init函数,并将GT9147_Scan函数删除

在这里插入图片描述

u8 GT9147_Init(void)
{u8 temp[5]; GPIO_InitTypeDef GPIO_Initure;__HAL_RCC_GPIOH_CLK_ENABLE();			//开启GPIOH时钟__HAL_RCC_GPIOI_CLK_ENABLE();			//开启GPIOI时钟//PH7GPIO_Initure.Pin=GPIO_PIN_7;            //PH7GPIO_Initure.Mode=GPIO_MODE_INPUT;      //输入GPIO_Initure.Pull=GPIO_PULLUP;          //上拉GPIO_Initure.Speed=GPIO_SPEED_FREQ_VERY_HIGH;     //高速HAL_GPIO_Init(GPIOH,&GPIO_Initure);     //初始化//PI8GPIO_Initure.Pin=GPIO_PIN_8;            //PI8GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  //推挽输出HAL_GPIO_Init(GPIOI,&GPIO_Initure);     //初始化CT_IIC_Init();      	//初始化电容屏的I2C总线  GT_RST(0);				//复位delay_ms(10);GT_RST(1);				//释放复位		    delay_ms(10); GPIO_Initure.Pin=GPIO_PIN_7;            //PH7GPIO_Initure.Mode=GPIO_MODE_INPUT;      //输入GPIO_Initure.Pull=GPIO_PULLUP;          //不带上下拉,浮空输入GPIO_Initure.Speed=GPIO_SPEED_FREQ_VERY_HIGH;     //高速HAL_GPIO_Init(GPIOH,&GPIO_Initure);     //初始化delay_ms(100);  GT9147_RD_Reg(GT_PID_REG,temp,4);//读取产品IDtemp[4]=0;
//	printf("CTP ID:%s\r\n",temp);	//打印IDreturn 0;
}

5、修改touchGFX代码添加触摸支持

打开STM32TouchController.cpp文件
添加头文件
在这里插入图片描述
修改void STM32TouchController::init()函数添加触摸初始化

在这里插入图片描述
修改bool STM32TouchController::sampleTouch(int32_t& x, int32_t& y)函数添加扫描触摸
在这里插入图片描述

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);**/uint8_t mode,temp;uint8_t buf[4];GT9147_RD_Reg(GT_GSTID_REG,&mode,1);	//读取触摸点的状态  if(mode&0X80&&((mode&0XF)<6)){temp=0;GT9147_WR_Reg(GT_GSTID_REG,&temp,1);//清标志 		}if((mode&0XF)&&((mode&0XF)<6)){GT9147_RD_Reg(GT_TP1_REG,buf,4);	//读取XY坐标值x = ((u16)(buf[1]&0x0f)<<8)+buf[0];y = ((u16)(buf[3]&0x0f)<<8)+buf[2];return true;}return false;
}

6、优化touchGFX动画显示效果

打开TouchGFXHAL.cpp文件
在这里插入图片描述

void TouchGFXHAL::initialize()
{// Calling parent implementation of initialize().//// To overwrite the generated implementation, omit call to parent function// and implemented needed functionality here.// Please note, HAL::initialize() must be called to initialize the framework.TouchGFXGeneratedHAL::initialize();uint32_t frameSize = DISPLAY_HEIGHT*DISPLAY_WIDTH*3;setFrameBufferStartAddresses((void *)(0xC0000000),(void *)(0xC0000000+frameSize),(void *)(0xC0000000+frameSize*2));setFrameRateCompensation(true);}

六、触摸验证

界面添加一个按钮,然后点击生成工程
在这里插入图片描述
keil5编译源码下载到开发版,点击按钮查看有没有按下效果

七、完整工程下载

点击下载完整工程

这篇关于touchGFX综合学习十四、基于cubeMX、正点原子H750开发版、RGB4.3寸屏移植touchGFX完整教程+工程(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/340877

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖