文章目录

  • 1.添加触摸IC驱动
  • 2.使能EMWIN触摸 GUIConf.h
  • 3.添加EMWIN GUI_X_Touch_Analog.c文件
  • 4.定时调用GUI_TOUCH_Exec
  • 5 GT911移植分辨率更改注意事项:



1.添加触摸IC驱动

2.使能EMWIN触摸 GUIConf.h

GUI_SUPPORT_TOUCH 1

3.添加EMWIN GUI_X_Touch_Analog.c文件

实现GUI_TOUCH_X_MeasureX
GUI_TOUCH_X_MeasureY
两个函数

int  GUI_TOUCH_X_MeasureY(void) 
{	
		int32_t yvalue;
    
		//电容屏的触摸值获取

		yvalue = g_GT911.Y0;

		return yvalue;

}

int  GUI_TOUCH_X_MeasureX(void) 
{
	int32_t xvalue;
	//电容屏的触摸值获取

		xvalue=g_GT911.X0;

		return xvalue;

}

直接将触摸IC驱动读取的坐标值传递进来即可,
需要注意的是当触摸没有按下时一定要将x,y的值指向一个屏幕外的值,如0xFFFF,这样EMWIN才能发送松开消息,否则会一直聚焦在某个控件,导致响应不正常

4.定时调用GUI_TOUCH_Exec

5 GT911移植分辨率更改注意事项:

正常切换分辨率是直接买对应的分辨率的成品

但有时候发过来的不一定是想要的分辨率

就要从软件上切换

1024600 <> 800480

如果触摸配置分辨率和屏幕分辨率相同,直接用驱动 配置啥都不用改

主要注意点就是

1.配置版本号

程序写入的版本号,必须大于等于GT9xx本地保存的版本号,才可以更新配置,否则当前写入配置无效。

datasheet中写的发送0x00 会将版本号初始化为’A’ 即0x41

实际需要将配置表第一个值改为0x00,

并将全部185个寄存器值即整个配置表写进去才能复位版本号

emwin如何发送 WM_TIMER消息_stm32


2 把寄存器配置数组写入(0x8047-0x8100),一共186个寄存器

0X80FF寄存器用于存储校验和,使得0X8047-0X80FF之间所有数据之和为0,如果校验不通过,当前配置无效。
校验和计算方式

uint8_t ucConfigChecksum = 0;
	    //计算校验和,0x8047 到 0x80FE 之字节和的补码
        for ( uint16_t i = 0; i < ( sizeof( s_GT911_CfgParams ) - 2 ); i++ )   //前184个
        {
            ucConfigChecksum += s_GT911_CfgParams[i];
        }
        s_GT911_CfgParams[184] = ( ~ucConfigChecksum ) + 1;

完整切换函数 需要通过切换 NOMAL 宏定义来完成

void GT911_Init( void )
{
    uint8_t ucConfigChecksum = 0, i;
    uint8_t ucIDBuf[5] = {0};
 
    //	uint8_t ucCFG[186] = {0};

    TS_IIC_Init();	//IIC接口初始化

    //emWin默认是发给图层1,如果是发给图层2,修改Layer参数为1
    //    State.Layer = 0;
  
    GT911_Reset_Sequence( GT911_IIC_ADDR ); //复位GT911,设定设备地址为0xBA/0xBB

   /* 调试代码 */
	id = GT911_ReadID();	
	ver = GT911_ReadVersion();
	cfg = GT911_ReadCFGVersion();
	if(id == 0x313139)
	{
	    g_GT911.Enable = 1;
	}
#if NOAML  //正常执行 需要保证想要的配置版本要比本地保存的版本高 否则按照后	//面的方式执行
    
	if(cfg < s_GT911_CfgParams[0])	
	{
	   // s_GT911_CfgParams[0] = 0x00; //写一次 重置
	    uint8_t ucConfigChecksum = 0;
	    //计算校验和,0x8047 到 0x80FE 之字节和的补码
        for ( uint16_t i = 0; i < ( sizeof( s_GT911_CfgParams ) - 2 ); i++ )   //前184个
        {
            ucConfigChecksum += s_GT911_CfgParams[i];
        }
        s_GT911_CfgParams[184] = ( ~ucConfigChecksum ) + 1;
	    GT911_WriteReg(GT911_CONFIG_REG, (uint8_t *)s_GT911_CfgParams, sizeof(s_GT911_CfgParams));

	}
	#else //版本混乱后  读出版本号不是想要的版本
	//将第一个字节写为0  整个写一遍 重置版本号后 再执行上面正常执行步骤
	if(cfg != 0x53)
	{
	    s_GT911_CfgParams[0] = 0x00; //写一次 重置
	    uint8_t ucConfigChecksum = 0;
	    //计算校验和,0x8047 到 0x80FE 之字节和的补码
        for ( uint16_t i = 0; i < ( sizeof( s_GT911_CfgParams 		) - 2 ); i++ )   //前184个
        {
            ucConfigChecksum += s_GT911_CfgParams[i];
        }
        s_GT911_CfgParams[184] = ( ~ucConfigChecksum ) + 1;
	    GT911_WriteReg(GT911_CONFIG_REG, (uint8_t *)s_GT911_CfgParams, sizeof(s_GT911_CfgParams));

	}
	#endif

  
}