1.准备工作
1.1 下载源码
这里选择下载LVGL8.3.2,我是用这个原因是因为,这个版本支持GUI软件的UI界面开发,LVGL更新版本很多,每一个都不是很一样,但大致方法相同。复制下面链接选择标签为8.3.2的版本下载即可。
https://gitee.com/my_lvgl/lvgl?_from=gitee_search
1.2 准备一个屏幕的显示程序
我这里使用3.5寸带触摸显示屏幕。
2.开始移植
在工程文件中,新建一个文件LVGL文件夹,放入源码。将lv_conf_templeat.h修改成lv_conf.h。如图所示
2.2 将examples文件中的porting文件修改成如下所示,
注意:以上修改只是为了使代码统一名字,要不然加上template很不好看。可以不用修改。
这里先移植显示文件,disp。其他是输入系统和文件系统暂时不用,以后在说。
2.3打开keil5新建分支,如图所示:
2.4.将lvgl源码的src里面所有的.c文件全部添加,子目录也添加,这里大家要有耐心,要不然编译可能会报错。然后添加examps/porting中的lv_port_disp.c文件到lvglport中。
2.5.添加头文件目录
2.6.打开lv_conf.h和lv_port_disp.h的宏,如图
2.7.在lv_port_disp.c中修改屏幕尺寸大小
2.8.选择buf的缓存方式,在LVGL中有三种缓存方式,我选择第一种,把其他两种注释掉即可
2.9.添加显示函数到disp_flush函数中,这里有两种方式一种是添加显示函数的描点函数,一种是填充区域函数,我这里使用了填充区域函数。大家如果不会使用填充区域,可以直接添加描点函数。如图所示:
2.10.修改堆栈的大小,在lvgl的说明中建议堆栈的大小为2000k以上。如图修改我这里使用的是stm32f103zet6
2.11.编译即可警告可以不用理会,这里注意如果提示头文件有未包含的可以把头文件前面的路径值去掉。
2.12.添加心跳函数,他是lvgl的心脏没有他lvgl运行不起来。我这里添加到了滴答定时器里面,大家可以使用tim定时器定时1ms中断中调用也可以。
2.13.在main函数中添加,如下代码:
2.14.移植完成,添加如下代码测试即可:
void lv_example_get_started_1(void)
{
lv_obj_t * btn = lv_btn_create(lv_scr_act()); /*Add a button the current␣
,→screen*/
lv_obj_set_pos(btn, 10, 10); /*Set its position*/
lv_obj_set_size(btn, 120, 50); /*Set its size*/
//lv_obj_add_event_cb(btn, btn_event_cb, LV_EVENT_ALL, NULL); /*Assign a␣
//,→callback to the button*/
lv_obj_t * label = lv_label_create(btn); /*Add a label to the button*/
lv_label_set_text(label, "Button"); /*Set the labels text*/
lv_obj_center(label);
}
2.15.注意如果改变了堆栈的大小2000后,还是说堆栈溢出,这里大家可以把lvgl的堆栈改小一点,这是我遇见的一个坑。如图
到这里移植算是结束了,期待下次再见。