LVGL移植一般步骤:
一、下载LVGL源码:目前下载LVGL 8.3
下载方式可以LVGL官网进行下载,也可以百度云下载此处不再多说,网上很多。
二、下载好的源码进行整理:
1、 将下载好的 lvgl-release-v8.3解压,打开后,如下图,图中标记的是移植有用的信息。
2、重新创建一个文件夹LVGL,将上图中的标记文件,复制粘贴到LVGL文件夹中,如下图所示,并将lv_conf_template.h 重新命名为 lv_conf_template.h
3、打开examples文件夹,将里面的删除,只保留porting文件夹。
4、打开porting文件夹,将lv_port_disp_template.c 等这几个文件名称中的template删除,如下图所示:
以上数据整理阶段基本完成了,后续进行stm32f103工程中的移植。
三、stm32f103工程移植LVGL
1、工程中创建新的分组:
2、在LVGL_Conf、LVGL_Porting、LVGL_Src中添加相应的文件,如下图
(2) LVGL_Porting分组中将LVGL/examples/Porting文件中.c 移植进入:
(3 ) LVGL_Src分组中 将LVGL/src文件中,包括子文件夹下的所有文件下的 .c 通通添加进来,目前我们完成了代码的添加。文件接近100多个,慢慢添加不用着急
四、工程添加好文件后,进行具体的移植操作
1、打开lv_conf.h 文件 将 #if 0 改为 #if 1
根据自己屏幕参数进行修改:不用改的话,此处不做处理。
根据实际情况,修改屏幕分辨率
2、打开 lv_port_disp.c文件,将#if 0 改为 #if 1 打开功能
根据自己屏幕显示参数例如 :240(H)* 280(V)自行修改下面参数;另外将屏幕的驱动函数 .h 添加到文件中
添加相应的画点显示函数:
修改显示存储数据的方式
3. 打开 lv_port_disp.h 同样的#if 0 改为 #if 1 并修改 #include "lvgl.h"
因为此屏幕没有触摸功能,所以后续的触摸等占时未做修改。
五、编译调试,如果显示的错误是内存不够,我们可以根据芯片的实际存储空间,SRAM空间进行调整 .s 中的堆、栈空间。其他错误可以参看其他文章说明的方式,在C/C++ 编译条件中添加东西,或者勾选 C99
注 :lv_tick_inc(1); 在Systick_Handler中实现,LVGL在调度时需要有个 1ms 时间节拍进行屏幕刷新操作,你也可以在一个Timer定时器中来实现。
六、样例测试:
int main(void)
{
uint16_t zjyLcdVsp =0;
/*---板级初始化 ----*/
BSP_Init();
printf("The stm32 and esp32 test start ...................\n");
/************ 测试LVGL 功能 ***********************/
LCD_Fill(0,0,LCD_W,LCD_H,WHITE);
#if 1
lv_init();
lv_port_disp_init();
// 按钮
lv_obj_t *myBtn = lv_btn_create(lv_scr_act()); // 创建按钮; 父对象:当前活动屏幕
lv_obj_set_pos(myBtn, 50, 100); // 设置坐标
lv_obj_set_size(myBtn, 50, 80); // 设置大小
while(1)
{
lv_timer_handler();
HAL_Delay(100);
}
#endif
测试效果演示: