lvgl入门学习第四篇lvgl移植

一、在STM32f103上运行LVGL库

总共分为如下8个步骤

  • 准备素材
  • 修改Keil工程名
  • 导入littleVGL库到Keil中
  • 修改lv_conf.h和lv_ex_conf.h配置文件
  • 添加定时器,为littleVGL提供心跳节拍
  • 移植底层显示驱动
  • 移植底层触摸驱动
  • 移植官方的演示例程

1、准备资料

LVGL的官方软件包、在STM32f103可以运行LCD的程序、在STM32f103可以运行定时器中断的程序
image

image

image

注意:

LVGL官方包一定要下载release x.xx分支中的。
image

2、拷贝 littleVGL 库到 工程 中

在 项目 根目录下新建 GUI 和 GUI_APP 俩个子目录,GUI 目录是用来存放跟 littleVGL 库相关的所有文件的,而 GUI_APP 是用来放GUI 应用代码的。
image
将下图的四个文件夹和文件复制到GUI目录下
image

其中,lv_conf_template.h改名为lv_conf.h,最后结果如下图
image
image

在实际项目中,可以删除掉 lv_examples 目录来减少项目所占的磁盘空间,将examples文件夹中的内容除了porting以外都删除掉。
image

对lvgl库文件作用概略解析:

1、c目录存放lvgl库文件
2、ample存放移动的porting文件
3、lv_conf_complate.h库的配置文件
4、lgvl.h:需要调用lvgl库中的函数API

3、导入 littleVGL 库到 Keil 中

打开 Keil 工程,点击image图标,打开分组管理面板,在 Groups 栏下新建
lvgl\example\porting
GUI\lvgl\src\core
GUI\lvgl\src\draw
GUI\lvgl\src\extra
GUI\lvgl\src\font
GUI\lvgl\src\hal
GUI\lvgl\src\lv_misc
GUI\lvgl\src\lv_gpu
GUI\lvgl\src\lv_widgets
分组,所有工程目录下对应的.c 文件依次按照下图添加到 keil 分组下面,最后如下图所示:
image

image

4、修改 Keil的头文件路径

image

--diag_suppress=68,111,188,223,546,1295

第一个包含头文件:

image

第二个包含头文件:

image

第三个包含头文件:

image


到该步骤编译,没有报错再进行。


5、配置输出

image
disp是配置输出,indev配置输入,fs配置带有文件系统。

1、将lv_port_disp_template.c/h中的#if 0修改为#if 1;

2、包含输出设备驱动头文件。

在lv_port_disp_template.c中的将输出设备头文件拷贝过去
image

3、在lv_port_disp_template.c中通过disp_init函数初始化输出设备。

image

4、在lv_port_disp_template.c中的lv_port_disp_init函数配置图形数据缓冲模式

image

5、在lv_port_disp_template.c中的lv_port_disp_init函数设置屏幕尺寸

image

6、在lv_port_disp_template.c中配置打点函数

打点函数存放屏幕的画点函数的,通过画点来实现lvgl图形库的现实。画点函数传入的形参中颜色的定义并不是指针的方式的话,一定要写成图中color_p->full的形式,
image
如上图红框中放置的是画点函数,需要自己写或者拷贝其他已写好的程序。

5、配置输入

image
image

1、将lv_port_indev_template.c/h中的#if 0修改为#if 1;

2、按需裁剪设备。

image
image
image

上述有 三个裁剪的地方!!

3、包含输入设备驱动头文件

image

4、在lv_port_indev_template.c中初始化相应的输入设备。

image

5、在lv_port_disp_template.c中返回按键设备扫描输入值

image

6、创建组Groups并关联相应部件

image
image

6、提供lvgl时基

定时器驱动文件也需要自己写,或者拷贝已写好的。这里需要用到定时器中断函数,实现1ms进入定时器中断函数,然后调用lv_tick_inc(1);
image

6.1 添加定时器驱动

在定时器驱动.c文件中添加#include "lvgl.h",这里建议添加LED闪烁灯,用来判断系统是否正常运行
image

6.2 在定时器中断函数中调用lv_tick_inc(1)(因为我设置的1ms,所以x=1)

image

注意:

如果设置定时器定时1ms,x=1,如果设置定时器中断定时500ms,x=500。
image

7、主函数修改配置

image

image
5ms执行一次,lv_timer_handler,让lvgl刷新起来。

内存不足报错处理

image

如果配置完以上步骤后报错,说内存不足。在lv_conf.h头文件修改动态分配内存空间的大小。lv_conf.h文件即使一开始从lv_conf_complate.h改名后的文件。
image

posted @ 2023-03-13 00:20  登云上人间  阅读(3668)  评论(0编辑  收藏  举报