记录STM32F407ZGT6移植LVGL过程

最近对UI移植很感兴趣,于是在看到一下大神博客的一些实战项目的时候,发现这个高度可裁剪、低资源占用、界面美观且易用的嵌入式系统图形库——LVGL(Light and Versatile Graphics Library),而且尝试移植的时候发现它的移植过程还是很简单的,秉承着学而时习之的理念,觉得还是有必要记录一下,以后回顾的时候不至于因时间而遗忘,同时也希望能给对该图形库有兴趣的朋友予以帮助!

1、准备工作

(1)一个例程,支持TFTLCD显示以及触摸

(2)图形库文件,这里我使用的版本是v8.2.0,因为我的GUI Guider图形软件目前只支持这个版本

2、开始移植

(1)打开lvgl_v8.2可以看到里面的文件有很多,移植过程只需要部分文件

src下的所有文件、examples文件夹下porting文件夹下的所有文件、demo文件夹下的所有文件(demo文件夹不是必须的,稍后要用这个文件夹下的案例验证是否移植成功)

(2)将以上文件拷贝到之前准备的例程工程目录下,修改porting文件夹下的所有文件

第一项:修改文件名称

修改前名称:

修改后名称:

第二项:修改.h文件里面的名称以及打开宏定义,三个文件均要如此修改,此处以第一个文件为例,其他两个文件如是修改即可。

修改前:

修改后:

(3)修改完成后添加文件到工程中,添加过程比较繁琐,需耐心仔细

(4)添加包含头文件路径,其中有一处需要注意,lvgl.h该文件的位置放置的地方不同,可能导致未能包含上,编译时报错,找不到这个文件,笔者遇到过,后来把lvgl.h文件放到和src目录同级,再添加包含工程目录,就通过了,如果遇到编译出现这个错误,可以看下是否文件路径没有被包含

(5)修改驱动文件,主要需要修改的文件,如下图,其中lv_port_disp.c文件与显示 有关,lv_port_indev.c文件与触摸有关

先修改lv_port_disp.c文件

屏蔽82行~92行内容,此处有三种方法用于定义缓冲区,来显示部件,我们采用第一个,创建一个buffer,另外两个申请的buffer较大

再修改disp_init(void),在其中添加lcd的初始化接口,lcd初始化也可以在main函数中调用,所以此处可以添加也可以不添加

最后修改刷新接口disp_flush()

显示部分内容修改完成,其中有一处需要注意,这处的宏定义,根据实际的LCD屏幕大小来填写,而且也需要注意横屏和竖屏方向问题

再修改lv_port_indev.c文件

lvgl提供五种输入设备驱动,触摸、鼠标、键盘、编码器、按钮等,此处我们使用触摸输入,将其他几项全部屏蔽:32行~48行、54行~60行、104行~171行

屏蔽完成后,添加触摸屏驱动

touchpad_init()中添加触摸屏初始化

touchpad_is_pressed()中添加触摸扫描函数

touchpad_get_xy()获取坐标函数中添加自己触摸屏的坐标

这样修改完成,注意:触摸屏校准过程不能缺少,笔者移植过程中忘记加屏幕触摸校准部分,导致触摸按钮一点反应都没有,找了好几天问题,后来打开lvgl日志,才发现是触摸返回的坐标不对,所以屏幕没识别到

修改完成后可移植demo验证,也可以用GUI Guider图形软件生产UI界面验证,

使用demo的话需要修改lv_conf.h文件夹下的一些宏,可按照demo里的指导来完成

笔者用GUI Guider图形软件生成了一个简单模型验证,能正常显示和触摸

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值