开发板:潘多拉开发板
系统版本:v4.0.3
LVGL版本:8.0.2
注:这篇文章就简单记录下编译成功,跑了一个 demo 的过程,至于是否完全移植成功,不确定哈,毕竟 LVGL 还没自学呢。。
一、创建目录
在 bsp/stm32/stm32l475-atk-pandora/board/ports 目录下创建一个 lvgl 目录,然后将 lvgl 的源码放进该目录。
目录结构如下所示。
├─lvgl
│ ├─lvgl-8.0.2
二、添加配置文件
将 lvgl-8.0.2/lv_conf_template.h 文件复制到 lvgl 同级目录下,并将其重命名为 lv_conf.h 。打开文件并将开头的 #if 0 更改为 #if 1 以使能其内容。
将 lv_drivers-6.1.1/lv_drv_conf_template.h 文件复制到 lv_drivers 同级目录下,并将其重命名为 lv_drv_conf.h 。打开文件并将开头的 #if 0 更改为 #if 1 以使能其内容。
这里需要注意一下 lv_conf.h 文件里面的宏,对于 8.0.2 版本来说,只需要修改下面这个宏就可以了,具体的数值根据你的 LCD 参数决定。
/* Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888) */
#define LV_COLOR_DEPTH 16
三、将主要的源码添加到工程中
在实际操作之前,我们需要知道有哪些代码是需要添加到工程里面的。
├─lvgl
│ ├─lvgl-8.0.2
│ │ ├─src (必须)
当然,这里只是添加了部分的源码,可以基本运行,如果要完整的源码,可以自行添加。
1、
在 bsp/stm32/stm32l475-atk-pandora/board/ports/lvgl、bsp/stm32/stm32l475-atk-pandora/board/ports/lvgl/lvgl-8.0.2/src 目录下创建一个内容和下面相同的 SConscript 文件,用于自动生成工程。
import os
from building import *
# get current dir path
cwd = GetCurrentDir()
# init src and inc vars
src = Glob('*.c')
inc = [cwd]
objs = DefineGroup('lvgl', src, depend = [], CPPPATH = inc)
list = os.listdir(cwd)
for item in list:
if os.path.isfile(os.path.join(cwd, item, 'SConscript')):
objs = objs + SConscript(os.path.join(item, 'SConscript'))
Return('objs')
2、
在 bsp/stm32/stm32l475-atk-pandora/board/ports/lvgl/lvgl-8.0.2 创建一个内容和下面相同的 SConscript 文件,用于自动生成工程。
import os
from building import *
# get current dir path
cwd = GetCurrentDir()
objs = []
list = os.listdir(cwd)
for item in list:
if os.path.isfile(os.path.join(cwd, item, 'SConscript')):
objs = objs + SConscript(os.path.join(item, 'SConscript'))
Return('objs')
3、
在 bsp/stm32/stm32l475-atk-pandora/board/ports/lvgl/lvgl-8.0.2/src 目录下的子目录 core、draw、font、hal、misc、widgets 中创建一个内容和下面相同的 SConscript 文件,用于自动生成工程。
from building import *
cwd = GetCurrentDir()
src = Glob('*.c') + Glob('*.cpp')+ Glob('*.a')
CPPPATH = [cwd, str(Dir('#'))]
# 因为是使用 keil 编译,所以要加上这句话
LOCAL_CCFLAGS = ' --c99 --gnu -g -W'
group = DefineGroup('lvgl', src, depend = [], CPPPATH = CPPPATH, LOCAL_CCFLAGS = LOCAL_CCFLAGS)
Return('group')
4、
对于 bsp/stm32/stm32l475-atk-pandora/board/ports/lvgl/lvgl-8.0.2/src 目录下的子目录 extra 需要单独处理,因为它里面还有多个子目录。(所以下面的代码可维护性有点差)
from building import *
cwd = GetCurrentDir()
src = Glob('*.c')
src += Glob('./layouts/grid/*.c')
src += Glob('./layouts/flex/*.c')
src += Glob('./themes/basic/*.c')
src += Glob('./themes/default/*.c')
src += Glob