极客秀
搜索

STM32驱动TFTLCD步骤

前两日购买了一块TFTLCD,它包括了一块SPI驱动的LCD屏幕,驱动IC是ST7789,电容触摸检测IC,驱动IC是CTS816。

如图蓝色的这块IC就是电容触摸IC,我们查看它的FPC排线组。

其中的1~12为驱动LCD所需要的引脚,13~18为触摸检测需要的IC,前者为SPI驱动,后者使用I2C驱动。因此我们需要分别找到ST7789的驱动和CTS816的驱动。
在GitHub中找到上传的开源代码。

首先是直接找到的这份ST7789的驱动,但是作者给出的三种屏幕大小分别是:240240,170320,135240.
而我们的屏幕大小是240
280,因此我们需要在源代码驱动上添加我们适合我们屏幕的参数。


#ifdef USING_240X280  
    #define ST7789_WIDTH 240    #define ST7789_HEIGHT 280  
    #if ST7789_ROTATION == 0        #define X_SHIFT 0        #define Y_SHIFT 20    #elif ST7789_ROTATION == 1        #define X_SHIFT 20        #define Y_SHIFT 0    #elif ST7789_ROTATION == 2        #define X_SHIFT 0        #define Y_SHIFT 20    #elif ST7789_ROTATION == 3        #define X_SHIFT 20        #define Y_SHIFT 0    #endif  
#endif

我们在原来的基础上定义我们的屏幕参数的宏定义,主要包括屏幕的大小,以及XY轴的偏移量,这就是深度封装的好处,可以不用大刀阔斧的修改代码,只需要修改相应的宏定义即可。
当然这个XY的偏移量是试出来的,偏移量不对的话会有部分的地方呈现雪花状。

关于CST816的STM32比较少,在Github上找到一份可以用的驱动,不过它的默认源代码是软件I2C,而我比较喜欢硬件I2C,于是把他原来的软件I2C驱动修改为硬件I2C


HAL_StatusTypeDef CST816_Init(I2C_HandleTypeDef *hi2c);HAL_StatusTypeDef CST816_ReadData(I2C_HandleTypeDef *hi2c, CST816_Data *data);void cst816_Set_Sleep_Time(I2C_HandleTypeDef *hi2c, uint8_t sec);void cst816_Clear_pos_and_ges(void);

如果大家需要这两份修改后的驱动可以在主页找到我的联系方式。 之后在主函数中添加屏幕和触摸屏的代码。


if (CST816_Init(&hi2c2) != HAL_OK)    {       // printf("CST816 initialization failed!n");       HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_10);       HAL_Delay(500);    }        while (1)    {        CST816_Data touch_data;        if (CST816_ReadData(&hi2c2, &touch_data) == HAL_OK)        {            if (touch_data.finger_num > 0)            {                //printf("检测到触摸,坐标: (%d, %d)n", touch_data.x, touch_data.y);                                // 在触摸点画一个小圆                ST7789_DrawFilledCircle(touch_data.x, touch_data.y, 5, RED);                                switch(touch_data.gesture)                {                    case GESTURE_SWIPE_UP:                        //printf("向上滑动n");                        break;                    case GESTURE_SWIPE_DOWN:                        //printf("向下滑动n");                        break;                    // ... 其他手势处理 ...                }            }        }                HAL_Delay(10);    }

后续可能用该屏幕直接画到一块H5或者H7的板子上,做一些测试。

1.转载请保留原文链接谢谢!
2.本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
3.本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。
4.本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
5.联系方式(#替换成@):pm#vimge.com

  相关内容