Hi,大家好,欢迎来到STM32之littlevGL课堂,我们在上一篇文章中已经将工程的工程树搭建好了,但是由于剩下的内容比较多,没法发在一篇文章内,所以这里我们再继续上一篇文章的内容,如果没有看过的同学,请先去查看第一节的内容。 对接littlevGL 我们先来修改下lv/port目录下的两个接口文件,我们需要把两个文件开头部分的 #if 0都修改为 #if 1,当然对应的头文件中的也要一并修改,这里很简单就不贴图片了,然后我们还需要将lv_port_indev.c文件中的一部分我们不需要的注释掉,或者直接删除掉,因为lvgl支持多种输入方式,像键盘、鼠标、按键等等,不过这里我们只需要触摸就可以,所以我们只留下我们需要的,然后我们将GT911触摸部分的接口对接一下,由于代码比较多,大家直接点击下载附件,然后解压,将文件的内容复制到lv_port_indev.c文件中即可: 我们在上面的代码中增加了一些我们自己添加的,这里我是在GT911驱动中新增加了两个函数,原型如下,大家可以直接复制到GT911驱动文件中: bool GT911_isPressed(void) { if(Dev_Now.Touch == 1){ Dev_Now.Touch = 0; return true; } return false; } void GT911_X_Y(int16_t *x, int16_t *y) { uint8_t buf[41]; uint8_t Clearbuf = 0; GT911_RD_Reg(GT911_READ_XY_REG, buf, 1); if ((buf[0]&0x80) == 0x00) { GT911_WR_Reg(GT911_READ_XY_REG, (uint8_t *)&Clearbuf, 1); HAL_Delay(10); } else { Dev_Now.TouchpointFlag = buf[0]; Dev_Now.TouchCount = buf[0]&0x0f; if (Dev_Now.TouchCount > 5) { GT911_WR_Reg(GT911_READ_XY_REG, (uint8_t *)&Clearbuf, 1); return ; } GT911_RD_Reg(GT911_READ_XY_REG+1, &buf[1], Dev_Now.TouchCount*8); GT911_WR_Reg(GT911_READ_XY_REG, (uint8_t *)&Clearbuf, 1); Dev_Now.Touchkeytrackid[0] = buf[1]; Dev_Now.X[0] = ((uint16_t)buf[3] << 8) + buf[2]; Dev_Now.Y[0] = ((uint16_t)buf[5] << 8) + buf[4]; Dev_Now.S[0] = ((uint16_t)buf[7] << 8) + buf[6]; if(Dev_Now.X[0] < 1024 && Dev_Now.X[0] > 0){ if(Dev_Now.Y[0] < 600 && Dev_Now.Y[0] > 0){ *x = (int16_t)Dev_Now.X[0]; *y = (int16_t)Dev_Now.Y[0]; Dev_Backup.X[0] = Dev_Now.X[0]; Dev_Backup.Y[0] = Dev_Now.Y[0]; } } else { *x = (int16_t)Dev_Backup.X[0]; *y = (int16_t)Dev_Backup.Y[0]; } } } 然后我们再来对接一下显示部分的接口,这部分相比触摸就有点麻烦了,我也是调了不少时间,因为我们是使用的DMA2D,这样速度更快,所以这里直接大家贴出完整代码来,大家参考下,不过还是建议大家直接下载完整工程,因为很多地方你不注意就可能会出错,对于LCD的驱动部分,还是建议大家去微雪我在上面给出的链接中的文章去学习一下,本系列文章我们着重讲应用层,太底层的内容我们不怎么涉及到,由于代码比较多,这里大家直接点击下载,然后解压后,将内容全部复制到lv_port_disp.c文件中即可: 其中这两行代码是根据你的显示屏来修改的: disp_drv.hor_res = 1024; disp_drv.ver_res = 600; 要包含的头文件: #include /* USER CODE BEGIN 2 */ lv_init(); lv_port_disp_init(); lv_port_indev_init(); demo_create(); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ lv_task_handler(); HAL_Delay(5); } /* USER CODE END 3 */ /** * @brief This function handles System tick timer. */ void SysTick_Handler(void) { /* USER CODE BEGIN SysTick_IRQn 0 */ /* USER CODE END SysTick_IRQn 0 */ HAL_IncTick(); /* USER CODE BEGIN SysTick_IRQn 1 */ lv_tick_inc(1); /* USER CODE END SysTick_IRQn 1 */ } 最后大家编译并下载代码应该就会看到效果了,我这里照了一张照片给大家看一下: 可以看到,我还在上面打了点字,恭喜你,到这里,就说明你的配置没有什么问题了,就可以开开心心的学习后面的课程了,建议新手第一次还是先下载完成工程测试,尽量使用相同的硬件,等你真正弄懂后你就知道自己怎么去配置工程了,最后附上完整代码下载地址: |