实现环境
硬件:基于正点原子探索者stm32f407ze
软件:LVGL 7.11 / 407实验28 触摸屏/407定时器文件
lvgl 7.11 gitee下载
https://gitee.com/linyuehai/stm32-f103-rc/tree/master/LVGL
项目文件:
参考资料:https://www.eefocus.com/embedded/484678
操作流程
基本准备
1.源文件获取
LVGL 7.11地址:
https://gitee.com/linyuehai/stm32-f103-rc/tree/master/LVGL
2.工程结构
解压工程,工程结构为:
3.移植详情
开始移植,推荐按照教程的命名方式和结构,否则可能报错找不到文件:
1.创建GUI文件夹,在内新建两个文件夹lvgl和lvgl_app
2.复制lvgl所有文件,到lvgl,我们在这个开始试验
3.修改显示的文件和配置文件,具体功能可以查看参考文件和百度,不做详解
4.导入工程:
不做详解,做完如下:
这里提一下:
你这里报错,找不到文件的话,要么是文件修改了名字,但是添加的路径名还是原本的名字,就是就是工程的路径添加错了。
5.修改keil设置
--diag_suppress=68 --diag_suppress=111 --diag_suppress=550
屏蔽68 111和550的警告信号,我没搞
修改堆栈大小,满足lcgl的要求,后续可以自己添加外部的ram,增加性能和效果
6.对接显示和触摸屏幕借口(lvgl7.11实现了显示,没有对接触摸,老版本对接实现)
//主要是两个函数lv_port_disp_init和disp_flush,对着改
void lv_port_disp_init(void)
{
/*-------------------------
* Initialize your display
* -----------------------*/
disp_init();
/*-----------------------------
* Create a buffer for drawing
*----------------------------*/
/* Example for 1) */
static lv_disp_draw_buf_t draw_buf_dsc_1;
static lv_color_t buf_1[MY_DISP_HOR_RES * 10]; /*A buffer for 10 rows*/
lv_disp_draw_buf_init(&draw_buf_dsc_1, buf_1, NULL, MY_DISP_HOR_RES * 10); /*Initialize the display buffer*/
/*-----------------------------------
* Register the display in LVGL
*----------------------------------*/
static lv_disp_drv_t disp_drv; /*Descriptor of a display driver*/
lv_disp_drv_init(&disp_drv); /*Basic initialization*/
/*Set up the functions to access to your display*/
/*Set the resolution of the display*/
disp_drv.hor_res = lcddev.width;
disp_drv.ver_res = lcddev.height;
/*Used to copy the buffer's content to the display*/
disp_drv.flush_cb = disp_flush;
/*Set a display buffer*/
disp_drv.draw_buf = &draw_buf_dsc_1;
#if LV_USE_GPU
/*Fill a memory array with a color*/
disp_drv.gpu_fill_cb = gpu_fill;
#endif
/*Finally register the driver*/
lv_disp_drv_register(&disp_drv);
}
static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
{
LCD_Color_Fill(area->x1,area->y1,area->x2,area->y2,(u16*)color_p);
/* IMPORTANT!!!
* Inform the graphics library that you are ready with the flushing*/
lv_disp_flush_ready(disp_drv);
}
7.添加时钟,基本就是tim的硬件改下
8.添加主函数,修改实现
测试
注意事项:
1.报错问题:
ARMCLANG: L6218E: Undefined Symbol __aeabi_assert
//按照官网教程:https://developer.arm.com/documentation/ka004216/latest
1.方法:(1)关闭mirlib
(2)自己实现
(3)添加"NDEBUG."宏
(4)自己实现__aeabi_assert函数
(5)添加外在库
2.文件找不到
1.检查文件名是否正确
2.检车文件路径是否包含
3.检测大小写
3.显示异常,检查接口配置