移植 lvgl 库

前言
由于近期要做一个装置 ,想着把装置做的好看一点,就打算使用 GUI 来做一个信息的相关显示,之前听说过一款比较轻量级的图形库,也就是 lvgl,手头又正好有一块搭配屏幕的野火指南者开发板,单片机型号是 STM32F103VET6,Flash 为 512KB,RAM 为 64KB,屏幕为 3.2 寸电阻触摸屏,我们在来看一下运行 lvgl 这个 GUI 需要的资源,所需资源如下图所示:
在这里插入图片描述
所需条件

几个比较关键的就是控制器的主频需要大于 16 MHz,对于 STM32F103来说,主频可以达到 72MHz,满足要求,所需要的 Flash 要大于 64KB,对于指南者这款开发板来将,他的主控是 STM32F103VET6,Flash 具有 512KB,远远满足要求。对于 RAM 来讲,lvgl 所需要的 RAM 是 8KB,推荐使用 24 KB,对于具有 64KB的 STM32F103VET6 来讲,是完全满足要求的。

综上,可以知道,使用野火指南者开发板来跑 lvgl 是完全没有问题的。

移植准备
为了更加快捷的完成移植,在这里就直接使用野火官方写好的液晶屏幕的驱动来进行 lvgl 的移植,首先找到野火配套例程中的第 30 号例程,也就是电阻触摸屏–触摸画板这个例程,将这个例程拷贝出来,在这个基础上进行移植。
在这里插入图片描述
野火官方例程列表

拷贝出来之后,进入到工程目录里,工程目录结构如下图所示:
在这里插入图片描述
工程目录结构

紧接着,我们进到 lvgl 的 github 仓库,选择已经发布的 v7.6.1 版本进行移植,

[github仓库](https://gitee.com/wenzi_D/images4mk/raw/master/lvgl github仓库.png)

我们将代码下载下来,放到 Libraries 里面,如下图所示:
在这里插入图片描述
代码下载

至此,我们就完成了移植前的准备工作,接下来进行移植代码。

导入 lvgl 库到 keil 工程中
首先在 keil 工程中新建 lvgl Groups 组,然后将
lvgl/src/lv_core
lvgl/src/lv_draw
lvgl/src/lv_font
lvgl/src/lv_hal
lvgl/src/lv_misc
lvgl/src/lv_themes
lvgl/src/lv_widgets
路径下的文件加入到新建的组中, 如下图所示:
在这里插入图片描述
紧接着,我们来看一下 lvgl 官网中的文档对于 lvgl 运行的要求:

[lvgl 运行要求](https://gitee.com/wenzi_D/images4mk/raw/master/lvgl 运行要求.png)

从序号 1 ,可以看出,栈空间需要大于 2KB 的空间,推荐大于 8 KB,我们这里设置栈空间为 8KB,也就是将如下所示位置的值改为 0x00002000
在这里插入图片描述
从序号 2 可以知道,它需要 C99 或者更新的编译器,我们这里选择 C99 进行编译,
[image-20201102141751510](https://gitee.com/wenzi_D/images4mk/raw/master/C99 编译器.png)

修改 lv_conf.h 配置文件
接下来,需要修改 lv_conf.h 这个文件,这个文件需要修改的地方有好几个,分别是如下几个地方:

首先先将田间编译宏更改为 #if 1
修改屏幕的分辨率,由于当前所用的野火指南者所搭配的是分辨率为 320 * 240 的,因此需要将 LV_HOR_RES_MAX更改为 240 以及将 LV_VER_RES_MAX 更改为 320 ,如下图所示:
在这里插入图片描述
修改 LV_COLOR_DEPTH,此值 1 是用于单色屏,当前我们的是彩色屏,应该设置为 16
修改LV_DPI 的值,默认值为 130,我们把他设置到 60,这个宏是用来调节界面缩放比例的,此值越大,控件分布的就越散,控件自身的间隔也会变大 ,如下图所示:
在这里插入图片描述
配置 lvgl 运行的动态堆的大小,再官方给出的堆的要求中,对于堆的要求是这样的:
在这里插入图片描述
推荐使用大于 16KB 的堆内存,因此这里配置的是 20KB,也就是将LV_MEM_SIZE 设置为 20KB,也就是将 LV_MEM_SIZE 的值设置为 20U * 1024U

因为当前开发板没有使用到 GPU 和文件系统,所以将 GPU 和文件系统的宏定义设置为 0,如下所示:
[image-20201102144629570](https://gitee.com/wenzi_D/images4mk/raw/master/GPU 和文件系统.png)
至此,lvgl 的文件就修改完毕了。接下来,就需要提供 lvgl 运行的心跳节拍

lvgl 心跳节拍设置
这里采取的一个方案是通过定时器来为 lvgl 来提供心跳节拍,更为直观的叙述也就是通过定时器产生 1ms 的定时中断,然后在中断服务函数里调用 lvgl 的心跳函数。野火的官方例程李提供了定时中断的代码,我们直接将这部分代码移植过来就好,下面是定时中断服务函数里面的相关内容:

#include "lvgl.h"
void TIM6_IRQHandler(void)
{
   
    if ( TIM_GetITStatus( TIM6, TIM_IT_Update) != RESET ) 
    {
      
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值