源码裁剪
源码所需要的内容如下:
- 【文件夹】demos、examples(里面只保留porting)、src
- 【.h文件】lv_conf_template.h、lvgl.h
其中,以下文件需要进行改名: - lv_conf_template.h -> lv_conf.h
- lv_port_disp_template -> lv_port_disp(位于example->porting)
- lv_port_indev_template -> lv_port_indev(位于example->porting)
插入代码
在STM32工程文件夹中,在"Middlewares"下新建"LVGL"文件夹存放LVGL代码。"LVGL"下面再新建两个文件夹:
- LVGL_SRC:再新建"lvgl"文件夹,用于存放lvgl裁剪后的代码,原因是源码中的头文件引用表述
- APPs:用于存放官方demos或自己已写的app
在MDK工程配置中,Group配置如下:(其中的 "所有.c文件" 包含其子目录)
添加头文件路径:
此外,魔术棒中Target->ARM Compiler要选择v5,并在C/C++中勾选C99
修改堆栈
CubeMX默认生成的堆栈不够,直接执行会卡死在HardFault_Handler,要修改堆栈大小(上次移植修改为:stack:0x1000,heap:0x4000)。具体修改方式如下:
配置显示
主要是lv_port_disp的内容,先把一些#if 0
改为#if 1
,然后配置以下内容:
- 配置图像数据缓冲模式,有三种模式,保留一种,注释掉不用的两种模式的代码(这一板块在
lv_port_disp_init
内) disp_init
函数,配置屏幕初始化 和设置横向显示- 配置屏幕尺寸:
MY_DISP_HOR_RES
、MY_DISP_VER_RES
disp_flush
函数,配置区域描点操作,注释掉官方if(disp_flush_enabled)
内的,用自己的代码
配置输入
主要是lv_port_indev的内容,先把一些#if 0
改为#if 1
,然后配置以下内容:
- 注释掉
lv_port_indev_init
中无用设备初始化代码; touchpad_init
函数,初始化触屏;- 配置触摸检测
touchpad_is_pressed
; - 配置读取坐标函数
touchpad_get_xy
;
配置时基
创建一个1ms的时基单元,每1ms执行lv_tick_inc(1)
测试

参考链接 :
[2-01]LVGL移植前的准备工作_哔哩哔哩_bilibili
STM32堆栈的大小及内存四 日(五)区的分析