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-功能展示】

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XQT_UI 组件|03 |加载组件 XQtLoading

XQtLoading 使用文档 简介 XQtLoading 是一个自定义的加载动画组件,旨在为用户提供可配置的旋转花瓣动画效果。它可以在应用程序中用于指示加载状态,提升用户体验。 特征 可配置性:用户可以根据需求调整旋转周期、缩放周期、最大/最小缩放…

Bi-LSTM-CRF实现中文命名实体识别工具(TensorFlow)

项目源码获取方式见文章末尾! 回复暗号:13,免费获取600多个深度学习项目资料,快来加入社群一起学习吧。 **《------往期经典推荐------》**项目名称 1.【MobileNetV2实现实时口罩检测tensorflow】 2.【卫星图像道路检测DeepLabV3P…

关于嵌入式学习的一些短浅经验

一、写在前面 感谢在 10.23,各位大佬对我进行的模拟面试,我也发现了我对知识的不熟练的部分,比如 IPC 方法和线程同步方法的知识。模拟面试第四期-已经拿到大厂 OFFER 的研究生大佬-LINUX 卷到飞起_哔哩哔哩_bilibili 然后,沈阳…

uniapp+uniCloud前端独立开发全栈项目Vue3版本学习路线,轻松开发H5、微信小程序、APP

概述 嗨,大家好,我是爱搞知识的咸虾米,这个学习路线是uniappuniCloud生态开发微信小程序、H5、APP等实战项目,从零基础开始到各种类型的项目案例,使用比较新的vue3语法糖版本,通过前端的技术可以轻松开发上…

微信小程序——消息订阅

首先用到的就是wx.requestSubscribeMessage接口。 注意:用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面 requestSubscribeMessage() {uni.requestSubscribeMessage({tmplIds: [],//需要订阅的消息模板的id的集合,一次调用最多可…

Docker 常用命令全解析:提升对雷池社区版的使用经验

Docker 常用命令解析 Docker 是一个开源的容器化平台,允许开发者将应用及其依赖打包到一个可移植的容器中。以下是一些常用的 Docker 命令及其解析,帮助您更好地使用 Docker。 1. Docker 基础命令 查看 Docker 版本 docker --version查看 Docker 运行…

向量检索学习记录

1、Faiss Faiss是一个用于高效相似搜索和密集向量聚类的库;(支持单个/多个GPU)官方文档:Home facebookresearch/faiss Wiki GitHub 安装(如果编译有问题,有些选项需要关下,比如GPU, Python&a…

从 Hadoop 迁移到数据 Lakehouse 的架构师指南

从 Hadoop 到数据湖仓一体架构的演变代表了数据基础架构的重大飞跃。虽然 Hadoop 曾经以其强大的批处理能力统治着大数据领域,但如今的组织正在寻求更敏捷、更具成本效益和现代化的解决方案。尤其是当他们越来越多地开始实施 AI 计划时。根本没有办法让 Hadoop 为 A…

【福建医科大学附属第一医院-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞 …

微信机器人自动回复了解下

现在使用微信来做私域营销和维护客户的非常多,在工作上会频繁地遭遇客户提出的相同问题,当我们的好友数量众多时,手动逐个回复可能会耗费大量的时间。 幸运的是,多微管理系统的自动回复功能为我们带来了福音。帮助咱们解决这一难…

原创作品——GIS和监控软件设计

这套数据可视化大屏软件UI设计旨在提供一个直观、高​‌‌效且易于理解的界面,用于展示和分析大量的能源数据和信息。以下是关于该系统UI设计的详细介绍: 整体布局与设计风格: 界面以蓝色调为主,代表冷静、专业和科技的氛围。 布…

VisualStudio2022配置2D图形库SFML

文章目录 1. 下载安装SFML库2. 创建C项目并配置SFML配置include目录和库目录链接SFML库配置动态链接库 3. 测试 1. 下载安装SFML库 SFML(Simple and Fast Multimedia Library)C库,适合2D游戏和图形界面,提供了以下模块&#xff1…

通过conda install -c nvidia cuda=“11.3.0“ 安装低版本的cuda,但是却安装了高版本的12.4.0

问题 直接通过 conda install -c nvidia cuda"11.3.0"安装得到的却是高版本的 不清楚原理 解决方法 不过我们可以分个安装 runtime toolkit 和 nvcc 安装指定版本的 cudatoolkit 和 nvcc conda install -c nvidia cuda-cudart"11.3.58" conda instal…

电机学习-SVPWM合成原理

一、核心理论 SVPWM 算法的理论基础是平均值等效原理 ,即在一个开关周 T s T_s Ts​内通过对基本电压矢量加以组合,使其平均值与给定电压矢量相等。 引用于《现代永磁同步电机控制原理及MATLAB仿真》 二、合成原理 在扇区 I 为例: 矢量 U o…

【实用知识】Spring Boot 优雅捕捉异常的几种姿势

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…

【损害和风险评估&坑洼】路面坑洼检测系统源码&数据集全套:改进yolo11-DCNV3

改进yolo11-DLKA等200全套创新点大全:路面坑洼检测系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.24 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片或者视频可…

【OpenAI】第五节(图像生成)利用 OpenAI 的 DALL·E 实现自动化图像生成:从文本到图像的完整教程

引言 OpenAI 推出的 DALLE 工具因其能够生成令人惊叹的艺术作品而备受瞩目。DALLE 不仅能够生成静态图像,还能根据用户的需求进行风格化处理,创造出独特的艺术作品。通过 OpenAI 的 API,你可以轻松将 DALLE 的强大功能集成到你的 Python 程序…

单反相机内存卡误删照片怎么办?别急,这里有恢复方法

在摄影的世界里,单反相机无疑是众多摄影爱好者与专业摄影师的首选工具。它不仅能够捕捉细腻丰富的画面细节,还提供了高度的操作灵活性和可扩展性。然而,在使用单反相机的过程中,我们难免会遇到一些技术上的困扰,其中之…

【网络面试篇】三次握⼿、四次挥手综述

目录 一、三次握手 1. 过程描述 2. 为什么不是四次握手?为什么不能两次握手? 二、四次挥手 1. 过程描述 2. 为什么是四次挥手? 一、三次握手 1. 过程描述 ① 客户端 向 服务器 发送 SYN 报文、初始化序列号 ISN(seqx&…

自定义鼠标事件在拖拽中的使用

目标: 显示鼠标在容器元素中划过时经过的元素,但是容器内肯能会出现大量元素,所以直接给容器元素添加click事件,通过elementFromPoint的API模拟子元素被点击事件效果 看看效果吧 涉及的重要对象 MousEvent 参考 MDN 相关代码 operateCont…