移植littleVGL到STM32(个人笔记)

参考自正点原子LittleVGL移植教程

本来是想直接快速入手一下littleVGL的,正点原子的移植教程做的很好,但版本是V6.0(现在更新到了V8.3),而我想移植最新版,所以全程试水,移植花了我大半天时间,遇到一堆坑,下面就介绍我移植的过程(大体步骤和正点原子相同,但是细节有些差异),仅供参考。

下载littleVGL源码

littleVGL 的官方网址为: https://littlevgl.com
littleVGL 的 github 网址为: https://github.com/littlevgl/lvgl
littleVGL 的在线文档网址为: https://docs.littlevgl.com/zh-CN/html/index.html

我直接到github下载最新版源码,当前最新版为V8.3

在这里插入图片描述

下载后,得到lvgl-master文件夹。

准备Keil工程

这里和正点原子移植教程一样,选用正点原子触摸屏实验工程作为工程模板(可到正点原子资料下载中心下载)。

在这里插入图片描述

将main.c无关代码删除,仅留下main.c核心代码

在这里插入图片描述

导入littleVGL库到Keil

在Keil工程根目录下创建两个文件夹,GUI/ 用来存放littleVGL源码,GUI_APP/ 用来存放图像应用(目前为空)。

在这里插入图片描述

拷贝源码
正点原子教程只拷贝了两个文件夹到Keil目录,但最新版和V6.0的源码目录结构变化很大,保险起见,我将刚才下载的所有littleVGL文件复制到了GUI文件夹(失败移植多次后总结出来的经验~~)【不过所有文件的大小有100M(其中demo/占50M),如果后面想减少工程占用空间,可以删除部分文件,但第一次移植,就全复制吧。】

在这里插入图片描述

复制完成后,重命名源码根目录下的lv_conf_template.h,改为lv_conf.h,这是littleVGL的全局配置文件,很重要。

在这里插入图片描述

Keil目录修改完成了,接下来还需要在Keil工程中添加源码文件,在工程目录结构里新建两个分组,命名GUI 和 GUI_APP,然后将源码目录下src/里所有.c文件文件添加到GUI分组中(注意是所有!包括子目录下的.c文件)。【这是一个折磨人的工作,因为子目录有点多,特别是有些目录下还有多层子目录,且很多子目录就一个.c文件。。。只能说Keil这个IDE不够人性化】

在这里插入图片描述


添加文件一定要仔细,我第一次因为少添加了源文件,报了各种莫名其妙的错误。


添加完文件后,我们还需要做 2 个比较重要的小操作,加大项目的栈空间到 2KB 和使能 C99 编译器功
能。【我也不知道为什么,教程这样规定的,照做就行了】

在这里插入图片描述
在这里插入图片描述

差点忘了,刚才添加完.c文件,没有将它们的头文件路径进行声明,继续使用魔法棒,添加头文件路径,下面这两个就够了,其他的后面需要再添加。

在这里插入图片描述


之前我还在考虑子目录下的头文件是否要管,但第一次失败后,我才发现,源码根目录下的lvgl.h已经把几乎所有头文件都包含了,这也是我选择把完整源码复制到Keil工程目录的原因,省的到时丢三落四。


修改lv_conf.h

这是一个全局配置文件,里面很多配置项,看得人眼花缭乱。其实这个文件不需怎么修改,至少我几乎没怎么改动(当然#if 0是一定要改的)。

在这里插入图片描述

第二个改动是参考正点原子移植教程,改了一下动态内存大小。

在这里插入图片描述

此时我们编译一下Keil工程,发现报了很多找不到lv_conf.h,解决办法有两个:

  1. lv_conf.h移动到src/的上上层目录,即当前lv_conf.h的上层目录;
  2. 或者添加宏声明 LV_CONF_INCLUDE_SIMPLE,这样编译器就会从所有已包含的头文件路径去找lv_conf.h

在这里插入图片描述

我不想动源文件的结构,选择了添加宏声明:

在这里插入图片描述

再次编译,还有一个错误,这是增加C99后才会报的错,解决办法是在函数前加个类型void

在这里插入图片描述

本以为这是最后一个错误,没想到再编译还有错,上一次成功移植没遇到的错误。

在这里插入图片描述

找了很久,没找到原因,仔细看Build Out信息,发现有一些xx_1.o类的文件,怀疑是重复添加了相同的.c文件,当时在添加.c文件时觉得很奇怪,以前重复添加会提示,今天直接给我加进去了(Keil出Bug了)。删除一些重复添加的.c文件后,依然报错。但是后面我重开Keil软件,再编译,竟然成功了。。搞不懂了。

在这里插入图片描述

但是有19个警告,正点原子移植教程中有一步时消除警告的,虽然和我遇到的警告不一样,但试了一下,有一点效果,警告少了一些。

在这里插入图片描述

在 Misc Controls 中填入--diag_suppress=68 --diag_suppress=111 --diag_suppress=550

在这里插入图片描述
在这里插入图片描述

移植底层显示驱动

littleVGL提供的底层显示驱动文件在GUI/examples/porting/路径下,

在这里插入图片描述

在GUI文件夹内新建一个文件夹lvgl_driver,用于存放底层驱动代码,

在这里插入图片描述

同时将他们重命名(删掉_template)

在这里插入图片描述

接着在Keil工程中添加源文件和头文件路径

在这里插入图片描述

lv_port_disp.h做如下修改:

在这里插入图片描述

lv_port_disp.c做如下修改:

使能,同时添加显示屏的驱动头文件

在这里插入图片描述
设置缓存方式,我选择10行缓存,我所用的屏幕分辨率为320*480,所以行宽为320,

在这里插入图片描述

设置分辨率

在这里插入图片描述

调用正点原子的LCD填充函数

在这里插入图片描述

移植底层触摸驱动

lv_port_indev.h做如下修改:

在这里插入图片描述

lv_port_indev.c做如下修改:

使能,同时添加触摸屏的驱动头文件

在这里插入图片描述
将除触摸屏以外的其他设备初始化屏蔽

在这里插入图片描述

在这里插入图片描述

触摸屏驱动修改比较简单,只需要添加“判断是否按下”和“获取按下坐标”两部分底层代码

在这里插入图片描述

添加GUI心跳节拍

正点原子触摸屏实验里没有定时器功能代码,需要另外添加,我们这节把定时器实验的timer/文件夹拷贝到我们的工程中。

在这里插入图片描述

接着将源文件和头文件进行添加

在这里插入图片描述

修改定时器3的中断服务函数

在这里插入图片描述

在main()进行初始化

在这里插入图片描述
最后不要忘了添加定时器固件库

在这里插入图片描述

运行demo

打开lv_conf.h,使能一个demo(好几个我都测试失败了),到其他地方使能也行

在这里插入图片描述

找到刚才使能的demo的位置

在这里插入图片描述

在工程中添加源文件,由于整个源代码的头文件都被工程包含,如果要想使用demo里的函数,只需要包含一个绝对路径的头文件(如下图)

在这里插入图片描述

最后,在main.c进行相关初始化,同时运行demo:

在这里插入图片描述
编译烧录

这是一个压力测试的demo。

请添加图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43772810/article/details/123588612