sIDF + LVGL8:ST7789V & CST816S 触摸屏移植
用到的所有文件链接
我整理的lvgl文件:https://gitee.com/BHJ2022/lvgl.git
gsm项目地址:https://gitee.com/gsm-wheather-project
零、准备工作
解压lvgl_disp_indev和gsm项目文件
1)将gsm中的屏幕及触摸驱动(touch_screen文件夹)直接复制到lvgl_disp_indev的component文件中
2)修改touch_screen的cmakelist如图
3)将gsm中的main中的include直接复制到lvgl_disp_indev的main文件中。包含main.h(头文件和函数声明)和bsp_board(管脚定义)
4)修改main的cmakelist如图
]
前期准备工作完毕
一、移植屏幕驱动
1、屏幕驱动修改添加背光(原工程使用的PMW,这里直接设置为高电平)——led.c
在 lcd_init()中添加,
2、lvgl接口修改
文件名
注释或删除lvgl_helper.h(esp32的驱动头文件),直接删除esp32Driver文件夹
添加屏幕长宽声明
屏幕显示初始化disp_init();
在函数中添加屏幕的初始化,或者直接将disp_init()改为lcd_init(SPI3_HOST, 80000000);
添加刷屏函数
双缓存模式,将【】中的数据改为图示
设置屏幕尺寸,前文定义的
设置刷屏回调函数
刷屏函数,调用的屏幕驱动中的函数lcd_flush_area()
完成以上步骤屏幕就应该可以正常显示了
二、移植触摸驱动
触摸芯片型号:cst816t
1、修改cst816.c,添加i2c初始化函数
2、在cst816t_init()初始化函数中调用
3、可以在cst816t_read_pos()中添加如图语句,可以检查触摸是否正常
串口输出
4、lvgl_disp_indev修改,修改touchpad_init();添加indev_drv.read_cb = touchpad_read;
1)打开touchpad(改为if1),如果没有其他输入设备需求,可以关闭mouse和encoder(改为if 0)
2)修改touchpad_init();添加触摸驱动初始化
3、修改 touchpad_read()如图,即图一中的回调函数,获取触摸位置坐标
三、编译常见错误
1)头文件不存在
由于直接复制的gsm文件,会有许多不存在的头文件,直接注释或删除即可。用到的头文件只有bsp_board.h;main.h;lcd.h:cst816t.h
在main.h()中可以有这些头文件
2)根据报错提示,适当添加头文件包含,记得修改cmakelist
四、lvgl demo使用
1、打开menuconfig,打开demo选项
直接搜索demo,根据需要打开demo。
其中widget大概率会报size不够,没有就直接忽略。修改图示size为48或者其他推荐大小
2、demo调用
1)跳转到图示头文件
2)根据打开的demo,继续跳转
3)找到目标函数,在lvgl_main中调用即可