当前位置: 首页 > news >正文

LVGL移植教程(超详细)——基于GD32F303X系列MCU

版本:LVGL Kernel V8.3.0,运行压力测试Demo Stress

首先放一张最终Stress Demo 运行图:
在这里插入图片描述

一、准备

1. GD32 Keil工程

准备任意一个屏幕可以正常显示的GD32工程:
在这里插入图片描述
在这里插入图片描述

2. LVGL源码

最新版现在已经是V9.2了,这里我选择了常用的V8.3版本,大家选择其他版本的时候配置上可能会略有差异:
Download: LVGL Kernel
在这里插入图片描述
我们会得到一个压缩文件,然后解压出来备用,现在准备好了一个GD32 Keil工程和一个LVGL源码:
在这里插入图片描述

二、LVGL移植

1. 文件操作

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

在Keil工程中新”LVGL“文件夹:
在这里插入图片描述

然后将上述文件拷贝至新建的文件夹内:
在这里插入图片描述
把默认的“lv_conf_template.h”改名为“lv_conf.h”
在这里插入图片描述

进入”.\LVGL\examples“目录,删除如下文件夹,仅保留”porting“文件夹:
在这里插入图片描述

修改后如下所示:
在这里插入图片描述

进入”.\LVGL\demos“目录,删除如下文件夹,仅保留”stress“文件夹(这里我们只跑这一个例程):
在这里插入图片描述
修改后如下所示:
在这里插入图片描述
把“.\LVGL\examples\porting“目录下的所有文件的”xxx_template“字样也删除掉:
在这里插入图片描述
修改后如下所示:
在这里插入图片描述

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

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

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

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

然后添加”sw“目录下的所有源文件,其他子目录下的不需要:
在这里插入图片描述
在这里插入图片描述

然后是目录”extra“下的所有源文件,注意,这里的子目录很多,一定要全部添加,不要遗漏!
在这里插入图片描述

然后是”font“、”hal“、”misc“、”widgets“文件夹:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

然后新建”LVGL_Porting“目录,添加”example\porting“下的所有源文件:
在这里插入图片描述

新建“LVGL_Demos”目录,存放“demos”文件夹下的所有源文件:
在这里插入图片描述

新建“”目录,存放“”目录下的头文件:
在这里插入图片描述
在这里插入图片描述

源文件添加完后接下来添加头文件路径,按如下内容添加:
在这里插入图片描述
然后回到“C/C++”标签页,勾选“C99 Mode”:
在这里插入图片描述
接下来就是代码操作部分

2. 代码操作

首先是启用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		//填写自己的屏幕尺寸信息

在这里插入图片描述

然后右键跳转到"lv_port_disp.h"文件,启用条件宏并修改头文件路径:
在这里插入图片描述
回到”lv_port_disp.c“文件,划到中间90行左右,LVGL支持多个缓冲区,MCU使用一般就用一个,我们注释掉其他两种写缓存方式:
在这里插入图片描述

添加自己的屏幕初始化函数和画点函数:
![[Pasted image .png]]

![[Pasted image .png]]

这时候我们编译一下,可以看到是0错误0警告:
在这里插入图片描述
接下来我们启用LVGL例程的播放,首先先调整堆栈空间的大小,这里根据自己MCU大小适当修改:
在这里插入图片描述

然后给LVGL一个系统时基,打开”gd32f30x_it.c“文件,首先添加头文件:
![[Pasted image .png]]
然后在系统滴答里添加lvgl的心跳:
在这里插入图片描述
然后进入"lv_config.h"文件,把例程”LV_USE_DEMO_STRESS“的宏打开:
![[Pasted image .png]]

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

#include "lvgl.h"
#include "lv_port_disp.h"
#include "lv_demo_stress.h"

在这里插入图片描述

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

	lv_init();lv_port_disp_init();

在这里插入图片描述
在main函数中完成调用:

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

在这里插入图片描述
然后我们编译运行:
在这里插入图片描述


到这里我们就完成了LVGL的移植,教程采用GD32但其他MCU均可参考,后续大家可以使用NXP的GUI-Guider或百问网的LVGL中文教程完成UI设计以及LVGL的交互控制等内容,LVGL应用项目展示:

Bilibili: 基于GD32+FreeRTOS+LVGL的智能通用控制Demo【1-功能展示】

相关文章:

LVGL移植教程(超详细)——基于GD32F303X系列MCU

版本:LVGL Kernel V8.3.0,运行压力测试Demo Stress首先放一张最终Stress Demo 运行图: 一、准备 1. GD32 Keil工程 准备任意一个屏幕可以正常显示的GD32工程: 2. LVGL源码 最新版现在已经是V9.2了,这里我选择了…...

《计算机原理与系统结构》学习系列——处理器(中)

系列文章目录 目录 流水线数据通路与控制概述5个流水级指令周期与流水级 流水线性能流水线时钟周期的长度T和数量cycles流水线性能 流水线数据通路流水线寄存器流水线分析图形化流水线流水线控制 流水线数据通路与控制 概述 5个流水级 指令周期与流水级 单周期实现中&#x…...

深入解析 OceanBase 数据库中的局部索引和全局索引

深入解析 OceanBase 数据库中的局部索引和全局索引 引言 在分布式数据库中,索引的设计对于优化查询性能至关重要。OceanBase 作为一款高性能的分布式关系数据库,支持局部索引和全局索引两种索引类型。理解这两种索引的特点和适用场景,对于数…...

2024防晒衣市场社媒营销洞察报告

2024年,硬防晒已经从单一的户外场景,扩展到通勤、外出游玩、穿搭等更多场景,多样化的需求导致的消费群体不断扩大,“防晒经济”迎来自己的主场时刻。 当前,防晒衣不仅需要满足不用场景的灵活切换,还要满足多…...

【Ubuntu20.04 Visual Studio Code安装】【VSCODE】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、打开VSCOE官网二、下载VSODE的Ubuntu版本三、安装VSCODE软件包四、导入工作空间(添加工作空间目录)五、安装插件:1.安装简体中文包2.安装ros插件…...

贪心算法day(1)

1.将数组和减半的最少操作次数 链接:. - 力扣(LeetCode) 思路:创建大跟堆将最大的数进行减半 注意点:double t queue.poll()会将queue队列数字减少一个后再除以2,queue.offer(queue.poll()/…...

窗口函数sql使用总结

一、开窗 基础知识:窗口分析函数 (1)LAG(col,n,DEFAULT) 用于统计窗口内往上第n行值 第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往…...

python单因素分析

写了个简易小程序实现,以后用的时候直接复制就行: import numpy as np from scipy.stats import fdatas [[65,60,69,79,38,68,54,67,68,43],[74,71,58,49,58,49,48,68,56,47],[22,34,24,21,20,36,36,31,28,33] ] a 0.05def get_mean_var(data):data_m…...

「C/C++」C++ STL容器库 之 std::list 双向链表容器

✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…...

应用程序框架进阶<HarmonyOS第一课>

一、判断题 1. 一个应用是由一个或多个HAP组成。 正确(True) 错误(False) 正确(True) 回答正确 2. UIAbility组件多实例启动模式是默认的启动模式。 正确(True)错误(False) 错误(False) 回答正确 二、单选题 1. 以下关于指定实例启动模式说法正确的是? …...

【C++】vector<string>-动态数组存储多个string

#1024程序员节 | 征文# //demo #include <iostream> #include <vector> #include <string>using namespace std; int main() {// 创建一个存储字符串的向量vector<string> Record;// 向向量中添加字符串Record.push_back("example");Record…...

66Analytics 汉化版,网站统计分析源码,汉化前台后台

66Analytics 汉化版,网站统计分析源码,汉化前台后台 本源码汉化前台后台&#xff0c;非其他只汉化前台版 网络分析变得容易。自托管、友好、一体化的网络分析工具。轻量级跟踪、会话回放、热图、用户旅程等 简单、好看、友好-大多数网络分析解决方案做得太多了&#xff0c;在大…...

蓝桥杯单片机STC15F2K60S2第十四届省赛代码详细讲解(附完整代码)

本文是写第十四届的蓝桥杯省赛代码&#xff0c;新手教程作者也写了一篇&#xff0c;欢迎去观看作者专门为新手写的一篇。也欢迎收录该专栏。 蓝桥杯单片机STC15F2K60S2第十三届省赛代码详细讲解&#xff08;附完整代码&#xff09; 专栏&#xff1a; 蓝桥杯单片机 然后接下来…...

[免费]SpringBoot+Vue智慧校园(校园管理)系统[论文+源码+SQL脚本]

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue智慧校园(校园管理)系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue智慧校园(校园管理)系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术的迅猛发展&#xff0c…...

景区导航地图怎么实现?基于LBS与3D GIS的智慧景区导航导览系统技术路线

随着经济的发展和人们物质生活水平改善,居民的旅游需求呈现多元化和个性化&#xff0c;自助旅游的人越来越多。许多游客在旅游行程中需要随时随地了解旅游景点有关的各类信息&#xff0c;如旅游景点介绍、推荐路线、地图导航等&#xff0c;合理规划和安排旅游线路。正是为了应对…...

RedisIO多路复用

一、多路复用要解决的问题: 并发多客户端连接&#xff0c;在多路复用之前的处理方案是同步阻塞网络IO模型&#xff0c;这种模型的特点就是用一个进程来处理一个网络连接。优点在于比较简单&#xff0c;缺点在于性能较差&#xff0c;每个用户请求到来都得占用一个进程来处理&am…...

C++的相关习题(2)

初阶模板 下面有关C中为什么用模板类的原因&#xff0c;描述错误的是? ( &#xff09; A.可用来创建动态增长和减小的数据结构 B.它是类型无关的&#xff0c;因此具有很高的可复用性 C.它运行时检查数据类型&#xff0c;保证了类型安全 D.它是平台无关的&#xff0c;可移植…...

C++《vector的模拟实现》

在之前《vector》章节当中我们学习了STL当中的vector基本的使用方法&#xff0c;了解了vector当中各个函数该如何使用&#xff0c;在学习当中我们发现了vector许多函数的使用是和我们之前学习过的string类的&#xff0c;但同时也发现vector当中一些函数以及接口是和string不同的…...

无人机避障——路径规划篇(一) JPS跳点搜索算法A*算法对比

JSP 跳点搜索算法与改进 A*算法对比 一、算法概述: 跳点搜索(Jump Point Search,JPS)算法:一种用于路径规划的启发式搜索算法。它主要用于在网格地图(如游戏地图、机器人运动规划地图等)中快速找到从起点到终点的最短路径。该算法在改进 A*算法的基础上进行了优化,通过跳过一…...

OpenCV ORB角点检测匹配和偏移计算

OpenCV ORB角点检测匹配和偏移计算 1. 简介2. ORB角点检测匹配和偏移计算2.1. 创建平移图片2.2. ORB角点检测2.3. ORB角点匹配2.4. 计算变换矩阵 1. 简介 首先通过 cv2.ORB_create 创建ORB检测器 orb&#xff0c; 然后通过 orb.detectAndCompute 检测两张图片获得ORB角点&…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

什么是VR全景技术

VR全景技术&#xff0c;全称为虚拟现实全景技术&#xff0c;是通过计算机图像模拟生成三维空间中的虚拟世界&#xff0c;使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验&#xff0c;结合图文、3D、音视频等多媒体元素…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知&#xff0c;帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量&#xff0c;能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度&#xff0c;还为机器人、医疗设备和制造业的智…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...

【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统

Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...