目录
1.下载LVGL源码
2.修改LVGL文件夹
(1)文件夹 examples 改动
(2)文件夹 demos 改动
3.最终LVGL文件夹内容
4.软件Keil配置、添加头文件
6.其它配置参考链接
1.下载LVGL源码
LVGL源码地址:https://github.com/lvgl/lvgl
2.修改LVGL文件夹
只需要这5个文件即可,把他们复制到一个新创建的 LVGL文件夹 里面。
(1)文件夹 examples 改动
在 examples文件夹 里面,只需要保留 porting文件夹 下面的文件夹,其余删除。
在 porting文件夹 里面,只需要保留下面 4个文件,其余删除。
(2)文件夹 demos 改动
在 demos文件夹 里面,只需要保留 keypad_encoder文件夹 下面的文件夹,其余删除。
(3)移动 porting、keypad_encoder文件夹
把 demos里面的porting 和 examples里面的keypad_encoder 移动到 LVGL 目录下。
3.最终LVGL文件夹内容
4.软件Keil配置、添加头文件
(1)首先复制 LVGL 文件夹,粘贴到STM32工程目录下,然后在MDK中包括LVGL的头文件和设置c99模式。
(2)MDK里面创建4个新的文件
文件夹名称 (Groups) | 用于存放什么文件 |
LVGL_myGui | 用户自己的界面代码文件、官方demo等 |
LVGL_conf | LVGL 的两个h文件 |
LVGL_porting | LVGL 的接口文件, 如显示、触摸屏、键盘等 |
LVGL_src | LVGL 的所有底层c文件 |
重要:
每个文件夹(Group),需要添加的文件,如下表:
文件夹 | 需要添加的文件 |
---|---|
LVGL_myGui | 不用添加。 |
LVGL_conf | 共3个文件:"LVGL"下的: lv_conf_template.h、lvgl.h、lv_version.h(要选择文件类型才能看到h文件) |
LVGL_porting | 共4个文件:"LVGL/ porting" 下的:lv_port_disp_template.c 、lv_port_disp_template.h、 lv_port_indev_template.c、lv_port_indev_template.h;(要选择文件类型才能看到 h 文件) |
LVGL_src | 近200+的c文件:"LVGL / src" 下的所有 c 文件(重点:包括src里所有子、子子文件夹的 c 文件. 不用添加h和mk文件) |
5.程序配置
1、启用 lv_conf_template.h
双击打开 lv_conf_template.h,对以下内容进行修改,以启用此文件。
- 第15行,原:#if 0,修改为:#if 1
完成后,是这个样子的:
2、启用 lv_port_disp_template.h
双击打开 lv_port_disp_template.h,修改以下内容,以启用此文件:
- 第7行,原:#if 0, 修改为:#if 1
- 第22行,原:“lvgl/lvgl.h", 修改为:”lvgl.h"
完成后,是这个样子的:
3、启用 lv_port_disp_template.c
双击打开 lv_port_disp_template.c,修改以下内容,以启用此文件:
- 第7行,原:#if 0, 修改为:#if 1
完成后,是这个样子的:
4、添加 LCD 驱动的头文件
在 lv_port_disp_template.c中:
- 第14行,插入你的LCD驱动文件,如:#include "bsp_LCD_ILI341.h",写上你的h文件。
- 第20行、第25行,是显示屏的宽、高度。查看你的显示屏参数,填写实际像素即可。
插入LCD的头文件,目的是为了让这个c文件,能调用LCD的: 画点函数;
注意一个:LVGL默认使用横屏的方式,这一点要注意,别写反了。
完成后,是这个样子的
5、选择创建缓存的方式,3选1
还是在 lv_port_disp_template.c 中,向下滚动,
(会出现很多错误提示,不用管。也可以先编译一次,让刚才启用的h文件生效,错误就会消失)
第86行到101行,LVGL 提供了创建显示缓冲区的3种方式,这里,必须3选1。
绝大多数情况下,使用第1种方法,即:只创建1个缓冲区;
- 注释掉第90~101行,即:不使用第2和第3种方法;
完成后,是这个样子的:
6、关联 画点函数
还是在 lv_port_disp_template.c 中,向下滚动,找到disp_flush( )函数(我这里用的最新版本源文件,这个disp_flush( )函数的参数不一样,后面有更改方法):
- 第173行,替换你的 LCD 的画点函数; 参数:x坐标、y坐标、16位颜色值。
- 小编用的画点函数:LCD_DrawPoint( x, y, color_p->full) ;
你的画点函数,可能和小篇所用的不一样,照样画瓢即可。
完成后,是这个样子的:
这里给LVGL一个画点函数后, LVGL就能完成需要的显示操作了。
进阶技巧:提高刷屏效率
一般地,画点函数的底层操作:发送X坐标指令、X值、Y坐标指令、Y值、颜色值。
假如要刷320x240的整屏,至少传输14万次指令、14万次坐标值,7万次颜色值。
相当地耗时。
要是你的LCD驱动文件中,有区域填充颜色的函数,就能大量地减少指令、坐标值的发送次数。
下面是使用 魔女开发板 LCD驱动文件中所提供的 区域填充 函数,可以效仿参考。
- LCD_DispFlush(area->x1, area->y1, area->x2, area->y2, (uint16_t*)color_p);
如果没有区域填充函数,不用强求,直接使用画点函数吧,先完成,再完善。
至此,显示部分的修改、注册,已完成。
点击编译:0 Erros。
7、disp_flush( )函数不一样
6.其它配置 参考链接
https://blog.****.net/mucherry/article/details/126685909?spm=1001.2014.3001.5501
https://openatomworkshop.****.net/6645ae51b12a9d168eb6c98d.html