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

【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分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版