MCU移植LVGL

一.准备

1.1. 任意一个屏幕可以正常显示的GD32工程,stm32等其它mcu都一样:

1.2. LVGL源码

下载最新版源文件:https://github.com/lvgl/lvgl/tree/release/v8.3
我们会得到一个压缩文件,然后解压出来备用,现在准备好了一个GD32 Keil工程和一个LVGL源码:
在这里插入图片描述

二、LVGL移植

2.1 文件操作

对于移植使用来说,我们主要使用下面这几个LVGL的关键文件:
在这里插入图片描述

  1. 在Keil工程中新”LVGL“文件夹,然后将上述文件拷贝至新建的文件夹内:

  2. 把默认的“lv_conf_template.h”改名为“lv_conf.h”
    2.进入”.\LVGL\examples“目录,删除其它文件夹,仅保留”porting“文件夹,修改后如下所示:
    在这里插入图片描述

  3. 进入”.\LVGL\demos“目录,删除如下文件夹,仅保留”stress“文件夹和lv_demos.h(这里我们只跑这一个例程),修改后如下所示:
    在这里插入图片描述

  4. 把“.\LVGL\examples\porting“目录下的所有文件的”xxx_template“字样也删除掉:修改后如下所示:

在这里插入图片描述

  1. 打开”.\LVGL\src\“文件夹,我们在Keil中把这几个文件夹的以及对应的源文件都包含进去:
    在这里插入图片描述

  2. 首先创建同文件名的目录:
    在这里插入图片描述

  3. 然后把对应文件夹的源文件添加进来:
    在这里插入图片描述

  4. Draw目录下需要注意,首先添加目录下的c源文件,
    在这里插入图片描述

然后添加”sw“目录下的所有源文件,其他子目录下的不需要:

9/然后是目录”extra“下的所有源文件,注意,这里的子目录很多,一定要全部添加,不要遗漏!

然后是”font“、”hal“、”misc“、”widgets“文件夹:

然后新建”LVGL_Porting“目录,添加”example\porting“下的所有源文件:

新建“LVGL_Demos”目录,存放“demos”文件夹下的所有源文件:

新建“”目录,存放“”目录下的头文件:

源文件添加完后接下来添加头文件路径,按如下内容添加:

然后回到“C/C++”标签页,勾选“C99 Mode”:

接下来就是代码操作部分

  1. 代码操作
    首先是启用LVGL,打开”lvgl_conf.h“文件,在第15行的条件宏处改为”1“:

然后适当调小一下内存分配:

这里可以尝试编译一下,如果没有错误就可以进行下一步,如果有,请检查源文件或头文件是否有遗漏:

然后打开”lv_port_disp.c“文件,完成屏幕接口的适配,首先启用条件宏,然后把头文件的”xxx_template“删除,因为我们已经在前面文件操作的时候重命名了,然后包含自己的屏幕驱动文件,并根据屏幕信息,调整尺寸,我的屏幕信息定义在自己的屏幕驱动文件的宏定义LCD_LENGTH和LCD_WIDTH中:

#define MY_DISP_HOR_RES LCD_LENGTH //填写自己的屏幕尺寸信息
#define MY_DISP_VER_RES LCD_WIDTH //填写自己的屏幕尺寸信息
1
2

然后右键跳转到"lv_port_disp.h"文件,启用条件宏并修改头文件路径:

回到”lv_port_disp.c“文件,划到中间90行左右,LVGL支持多个缓冲区,MCU使用一般就用一个,我们注释掉其他两种写缓存方式:

添加自己的屏幕初始化函数和画点函数:

这时候我们编译一下,可以看到是0错误0警告:

接下来我们启用LVGL例程的播放,首先先调整堆栈空间的大小,这里根据自己MCU大小适当修改:

然后给LVGL一个系统时基,打开”gd32f30x_it.c“文件,首先添加头文件:

然后在系统滴答里添加lvgl的心跳:

然后进入"lv_config.h"文件,把例程”LV_USE_DEMO_STRESS“的宏打开:

回到main.c文件,添加如下头文件:

#include “lvgl.h”
#include “lv_port_disp.h”
#include “lv_demo_stress.h”
1
2
3

在系统初始化中加入LVGL初始化:

lv_init();
lv_port_disp_init();

1
2

在main函数中完成调用:

int main(void)
{
/* configure systick */
systick_config();
System_Init();
lv_demo_stress();
while (1){
lv_timer_handler();
delay_1ms(1);
}
}

然后我们编译运行:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/915721.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

❤React-JSX语法认识和使用

1、JSX基本使用​ JSX是React的核心 JSX是ES的扩展 jsx语法 -> 普通的JavaScript代码 -> babel React可以使用JSX的前提和原因: React生态系统支持: 脚手架通常用于构建React应用程序,而JSX是React框架的核心语法之一。因此&#xf…

业务、技术、管理,谁才是指标平台的用户?

指标平台究竟应该给谁用?这个问题的答案涉及业务侧、技术侧和管理侧三个关键维度,每个维度都有不同的角色和需求。 业务侧:赋能一线,驱动增长 在业务侧,指标平台是前线员工的“作战地图”和“导航仪”。业务人员&…

向日葵软件Windows系统连接苹果系统(MacOS)的无反应问题解决办法

前言 向日葵软件最近开始收费了的,打算收割我们。这也是没有办法的事情,毕竟他们的程序员也是需要吃饭的,我也表示理解。 所以,我在连接了几次发现反应很迟钝后,果断的买了158元的包年会员。 但是,在买了会…

pip install volcengine-python-sdk报错

使用MetaGPT,配环境的时候,报错信息为: error: could not create ‘build\lib\volcenginesdktransitrouter\models\transit_router_traffic_qos_marking_policy_for_describe_transit_router_traffic_qos_marking_policies_output.py’: No s…

二叉树的遍历(手动)

树的遍历分四种: 层序遍历 前序遍历 中序遍历 后序遍历 层序遍历: 很好理解,就是bfs嘛(二不二叉都行) 前序遍历: 又叫先跟遍历,遍历顺序是根->左->右(子树里也是&#…

2024 年 Apifox 和 Postman 对比介绍详细版

Apifox VS Postman ,当下流行的的两款 API 开发工具,2024 版对比!

【C语言刷力扣】1502.判断能否形成等差数列

题目: 解题思路; 先对数组进行升序排序,再用循环对比两相邻元素之间的差值。若出现不同,即不是等差数列。 时间复杂度: 空间复杂度: int compare(const void* a, const void* b) {return (*(int *)b - *(int *)a…

自动驾驶系列—从数据采集到存储:解密自动驾驶传感器数据采集盒子的关键技术

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

程序员的数学之进制与零

最近一年多发生了很多平凡的大事,应接不暇,一度断更。从今儿起再接上来。 先从数学开始吧,因为太枯燥了。 生活中有许多种进制在共同起作用,例如,数学上的十进制、计算机中的二进制、八进制和十六进制、计时的60进制、…

高校大数据人工智能教学沙盘分享

大数据教学实训沙盘(TipDM-SP)是根据企业实际项目建设而成,并提供沙盘配套装置、软件以及教学实训资源。沙盘的作用主要有3个: 1、采集真实数据,解决教学中缺少真实数据的困扰; 2、形成从数据…

wsl配置ubuntu22.04,并配置docker

wsl配置ubuntu22.04,并配置docker 文章目录 wsl配置ubuntu22.04,并配置docker一、在Windows上安装Linux子系统前提条件安装步骤 二、wsl安装系统到其他盘①查看wsl运行状态,将其保持在关闭状态②导出当前Linux的镜像③注销之前的系统并检查④…

【SpringBoot】20 同步调用、异步调用、异步回调

Git仓库 https://gitee.com/Lin_DH/system 介绍 同步调用:指程序在执行时,调用方需要等待函数调用返回结果后,才能继续执行下一步操作,是一种阻塞式调用。 异步调用:指程序在执行时,调用方在调用函数后立…

【Elasticsearch入门到落地】1、初识Elasticsearch

一、什么是Elasticsearch Elasticsearch(简称ES)是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。它使用Java编写,基于Apache Lucene来构建索引和提供搜索功能,是一个分布式、可扩展、近实…

开源项目低代码表单设计器FcDesigner扩展自定义的容器组件.例如col

开源项目低代码表单设计器FcDesigner中的容器组件可以帮助您实现更灵活的布局设计。在这里,我们以一个简单的 Col 容器组件为例,来演示如何定义和使用它。 源码地址: Github | Gitee | 文档 定义组件 首先,我们创建一个 Col 组件&#xf…

【mysql】使用宝塔面板在云服务器上安装MySQL数据库并实现远程连接

前言 使用宝塔Linux面板安装MySQL数据库并实现远程连接 使用宝塔面板安装mysql 宝塔面板,华为云开放3306端口 一些命令 // 命令行连接数据库 mysql -uroot -p // MySQL 5 版本 GRANT ALL ON *.* TO root% IDENTIFIED BY 替换成你的root密码 WITH GRANT OPTION; // …

【算法一周目】双指针(2)

目录 有效三角形的个数 解题思路 C代码实现 和为s的两个数字 解题思路 C代码实现 三数之和 解题思路 C代码实现 四数之和 解题思路 C代码实现 有效三角形的个数 题目链接:611. 有效三角形的个数题目描述:给定一个包含非负整数的数组nums&…

Nginx+ThinkPHP+Vue解决跨域问题的方法详解

解决过程主要有两个步骤。 1.nginx配置允许跨域 在你部署的网站对应的端口配置文件里设置,我的目录结构是这样的: server { listen 8080; server_name localhost; root "D:/phpstudy_pro/WWW/admin/landpage_se…

实用教程:如何无损修改MP4视频时长

如何在UltraEdit中搜索MP4文件中的“mvhd”关键字 引言 在视频编辑和分析领域,有时我们需要深入到视频文件的底层结构中去。UltraEdit(UE)和UEStudio作为强大的文本编辑器,允许我们以十六进制模式打开和搜索MP4文件。本文将指导…

wordpress搭建主题可配置json

网站首页展示 在线访问链接 http://dahua.bloggo.chat/ 配置json文件 我使用的是argon主题,你需要先安装好主题,然后可以导入我的json文件一键配置。 需要json界面配置文件的,可以在评论区回复,看见评论我会私发给你。~

C++模板特化实战:在使用开源库boost::geometry::index::rtree时,用特化来让其支持自己的数据类型

用自己定义的数据结构作为rtree的key。 // rTree的key struct OverlapKey {using BDPoint boost::geometry::model::point<double, 3, boost::geometry::cs::cartesian>; //双精度的点using MyRTree boost::geometry::index::rtree<OverlapKey, boost::geometry::in…