嵌入式:LVGL移植到STM32F407ZE的实现

实现环境

硬件:基于正点原子探索者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.显示异常,检查接口配置
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/GongmissYan/article/details/116019453