你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32U3评测】驱动GT911触摸

[复制链接]
lugl 发布时间:2025-5-25 09:13

【前言】

前面驱动了LCD屏以及移植了TouchGFX,那莫为了更好的体验TouchGFX就需要实现触摸交互,这里我选用了ST7789+GT911的触摸屏,分辨率为240*320。下面就如何驱动GT911来逐一分享。

【硬件】

触摸屏有四根有关GT911的引线,分别为SDA、SCL、INT、RST。他们分别为i2c的数据与时钟线,INT为触摸后产生的中断引脚,RST为复位引脚。

根据开发板的原理图,我这里选用接线如下所示:

SDA--PB13 SCL--PB14 INT--PC8 RST--PB5

【工程配置】

打开stm32cubMX打开I2C2,分配引脚为PB13\PB14,配置PC8为中断输入。配置PB5为输出模式。

【注】I2C需要配置为上拉模式,要不I2C不能产时序。

image.png

配置好后,生成工程。

【代码移植】

复制一份原来在stm32f769上的gt911的代码到工程中:

修改初始化代码如下:

void GTP_Init(void)
{
  /*初始化gt9157的设备地址为0x28/0x29*/

  HAL_GPIO_WritePin(GTP_INT_GPIO_PORT, GTP_INT_GPIO_PIN, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(GTP_RST_GPIO_PORT, GTP_RST_GPIO_PIN, GPIO_PIN_RESET);
  HAL_Delay(100);
  /*复位为低电平,为初始化做准备*/
  HAL_GPIO_WritePin(GTP_INT_GPIO_PORT, GTP_INT_GPIO_PIN, GPIO_PIN_SET);
  HAL_Delay(5);

  /*拉高一段时间,进行初始化*/
  HAL_GPIO_WritePin(GTP_RST_GPIO_PORT, GTP_RST_GPIO_PIN, GPIO_PIN_SET);
  HAL_Delay(10);

  HAL_GPIO_WritePin(GTP_INT_GPIO_PORT, GTP_INT_GPIO_PIN, GPIO_PIN_RESET);
  HAL_Delay(50);
  /*把INT引脚设置为浮空输入模式,以便接收触摸中断信号*/
  GPIO_InitTypeDef GPIO_InitStructure;
  GPIO_InitStructure.Pin = GTP_INT_GPIO_PIN;
  GPIO_InitStructure.Mode = GPIO_MODE_INPUT;
  GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStructure.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GTP_INT_GPIO_PORT, &GPIO_InitStructure);
  HAL_NVIC_SetPriority(EXTI8_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(EXTI8_IRQn);

  // 读取ID
  HAL_Delay(100);
  uint8_t GTP_ID[4];
  GTXXXX_ReadReg(GT_PID_REG, GTP_ID, 4);
  printf("GTP_ID:%s\n", GTP_ID);

  // 写入配置表
  GTXXXX_WriteReg(GT_CFGS_REG, (uint8_t *)CTP_CFG_GT911, sizeof(CTP_CFG_GT911));
  HAL_Delay(100);
 // 写入分辨率
  // config_data[0] = (uint8_t)240>>8 & 0xFF;
  // config_data[1] = (uint8_t)240 & 0xFF;
  // config_data[2] = (uint8_t)320>>8 & 0xFF;
  // config_data[3] = (uint8_t)320 & 0xFF;

  // 转换为软复位模式
  uint8_t _temp = 2; // 中间变量
  GTXXXX_WriteReg(GT_CTRL_REG, &_temp, 1);
  HAL_Delay(100);
  // GTXXXX_WriteReg(GT_TP1_REG, config_data, 4); // 设置分��率
  // 转换为读取坐标模式
  _temp = 0; // 中间变量
  GTXXXX_WriteReg(GT_CTRL_REG, &_temp, 1);
}

【代码测试】

在main中引用初始化,在触摸中断中读取坐标:

image.png

image.png

验证触摸坐标正确。

收藏 评论0 发布时间:2025-5-25 09:13

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版