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

【STM32U3 评测】驱动GT911触摸屏

[复制链接]
lugl 发布时间:2026-5-29 11:39

在我的ST7789屏上适配的是GT911的触摸屏。

【硬件接口】

SDA——I2C1_SDA接PB7

SCL——I2C1_SCL接PB7

INT——普通GPIO接PC6

RST——普通GPIO接PB10

【stm32cubeMX适配】

1、打开i2c1,并配置IO为上拉。

image.png

image.png

2、生成工程。

【代码移植】

生成keil工程后,添加gt911.c/h

修改代码如下:

/***************************************** I2C Functions *****************************************/
static void GTXXXX_WriteReg(uint16_t addr, uint8_t *buf, uint8_t len)
{
    /* Use Mem_Write - handles register address + data write */
    HAL_I2C_Mem_Write(&hi2c1, GT911_DIV_W, addr, 2, buf, len, HAL_MAX_DELAY);
}

static void GTXXXX_ReadReg(uint16_t addr, uint8_t *buf, uint8_t len)
{
    /* Use Mem_Read - handles register address + data read with proper STOP/START */
    HAL_I2C_Mem_Read(&hi2c1, GT911_DIV_W, addr, 2, buf, len, HAL_MAX_DELAY);
}

/***************************************** Reset *****************************************/
void GT911_Reset(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    /* Set INT (PC6) as output, low */
    GPIO_InitStruct.Pin = GT911_INIT_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GT911_INIT_GPIO_Port, &GPIO_InitStruct);
    HAL_GPIO_WritePin(GT911_INIT_GPIO_Port, GT911_INIT_Pin, GPIO_PIN_RESET);

    /* Set RST (PB10) as output, low */
    GPIO_InitStruct.Pin = GT911_RST_Pin;
    HAL_GPIO_Init(GT911_RST_GPIO_Port, &GPIO_InitStruct);
    HAL_GPIO_WritePin(GT911_RST_GPIO_Port, GT911_RST_Pin, GPIO_PIN_RESET);

    /* Set INT high first */
    HAL_GPIO_WritePin(GT911_INIT_GPIO_Port, GT911_INIT_Pin, GPIO_PIN_SET);
    HAL_Delay(5);

    /* Release RST */
    HAL_GPIO_WritePin(GT911_RST_GPIO_Port, GT911_RST_Pin, GPIO_PIN_SET);
    HAL_Delay(10);

    /* Set INT low */
    HAL_GPIO_WritePin(GT911_INIT_GPIO_Port, GT911_INIT_Pin, GPIO_PIN_RESET);
    HAL_Delay(50);

    /* Set INT as input (now acts as INT pin) */
    GPIO_InitStruct.Pin = GT911_INIT_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GT911_INIT_GPIO_Port, &GPIO_InitStruct);

}

注意的是需要对修改i2c的发送与接收为HAL_I2C_Mem_Write,HAL_I2C_Mem_Read,要不会造成发送后与GT911匹配不上,出现发送数据后出现NAK的错造成通信不上。

还有就是RST的时序问题,需要根据逻辑分析仪的反馈调整从而实现0x28的地址。

【适配lvgl】

在keil的lvgl中添加input选项。

2、修改触摸函数如下:

static void touchpad_read(lv_indev_t * indev_drv, lv_indev_data_t * data)
{
    static int32_t last_x = 0;
    static int32_t last_y = 0;

        GT911_Scan();
    if(User_Touch.Touch_Number > 0)  
    {
        uint16_t raw_x = User_Touch.Touch_XY[0].X_Point;
            uint16_t raw_y = User_Touch.Touch_XY[0].Y_Point;
            data->point.x = ((raw_y) * 240) / 320;  
            data->point.y = ((raw_x) * 320) / 240;  
            char buf[64];
                int len = sprintf(buf, "X:%d Y:%d\r\n", data->point.x, data->point.y);
        HAL_UART_Transmit(&hcom_uart[COM1], (uint8_t *)buf, len, 100);
        data->state = LV_INDEV_STATE_PRESSED;
    }
    else
    {
        data->state = LV_INDEV_STATE_RELEASED;
    }
}

这里我们需要根据四个角点的反馈来进行换算。

【实验效果】

触摸屏后,如期打印出坐标:

image.png

收藏 评论0 发布时间:2026-5-29 11:39

举报

0个回答

所属标签

ST中文论坛活动

即日起开启活动话题入口,之后的活动统一都放在此处,欢迎大家的加入!


最新内容

相似分享

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