stm32移植LVGL(LVGL 8.2.0)

news2024/11/5 16:30:50

目录

1.下载LVGL源码

2.修改LVGL文件夹

(1)文件夹 examples 改动

(2)文件夹 demos 改动 

3.最终LVGL文件夹内容

4.软件Keil配置、添加头文件 

5.程序配置 

6.其它配置参考链接


1.下载LVGL源码

LVGL源码地址:https://github.com/lvgl/lvgl

2.修改LVGL文件夹

只需要这5个文件即可,把他们复制到一个新创建的 LVGL文件夹 里面。

(1)文件夹 examples 改动

        在 examples文件夹 里面,只需要保留 porting文件夹 下面的文件夹,其余删除。

        在 porting文件夹 里面,只需要保留下面 4个文件,其余删除。 

 

(2)文件夹 demos 改动 

        在 demos文件夹 里面,只需要保留 keypad_encoder文件夹 下面的文件夹,其余删除。 

 (3)移动 porting、keypad_encoder文件夹

        把 demos里面的porting 和 examples里面的keypad_encoder 移动到  LVGL 目录下。

3.最终LVGL文件夹内容

4.软件Keil配置、添加头文件 

(1)首先复制 LVGL 文件夹,粘贴到STM32工程目录下,然后在MDK中包括LVGL的头文件和设置c99模式。

(2)MDK里面创建4个新的文件

文件夹名称 (Groups)用于存放什么文件
LVGL_myGui用户自己的界面代码文件、官方demo等
LVGL_confLVGL 的两个h文件
LVGL_portingLVGL 的接口文件, 如显示、触摸屏、键盘等
LVGL_srcLVGL 的所有底层c文件

重要:

        每个文件夹(Group),需要添加的文件,如下表:

文件夹 需要添加的文件
LVGL_myGui不用添加。
LVGL_conf共3个文件:"LVGL"下的: lv_conf_template.h、lvgl.h、lv_version.h(要选择文件类型才能看到h文件)
LVGL_porting共4个文件:"LVGL/ porting" 下的:lv_port_disp_template.c 、lv_port_disp_template.h、 lv_port_indev_template.c、lv_port_indev_template.h;(要选择文件类型才能看到 h 文件)
LVGL_src近200+的c文件:"LVGL / src" 下的所有 c 文件(重点:包括src里所有子、子子文件夹的 c 文件. 不用添加h和mk文件)

5.程序配置 

1、启用 lv_conf_template.h

双击打开 lv_conf_template.h,对以下内容进行修改,以启用此文件。

  • 第15行,原:#if 0,修改为:#if 1 

完成后,是这个样子的:

2、启用 lv_port_disp_template.h

双击打开 lv_port_disp_template.h,修改以下内容,以启用此文件:

  • 第7行,原:#if 0, 修改为:#if 1 
  • 第22行,原:“lvgl/lvgl.h", 修改为:”lvgl.h"

完成后,是这个样子的:

3、启用  lv_port_disp_template.c 

双击打开 lv_port_disp_template.c,修改以下内容,以启用此文件:

  • 第7行,原:#if 0, 修改为:#if 1 

完成后,是这个样子的:

4、添加 LCD 驱动的头文件

在 lv_port_disp_template.c中:

  • 第14行,插入你的LCD驱动文件,如:#include "bsp_LCD_ILI341.h",写上你的h文件。
  • 第20行、第25行,是显示屏的宽、高度。查看你的显示屏参数,填写实际像素即可。

插入LCD的头文件,目的是为了让这个c文件,能调用LCD的: 画点函数;

注意一个:LVGL默认使用横屏的方式,这一点要注意,别写反了。

完成后,是这个样子的

5、选择创建缓存的方式,3选1

还是在 lv_port_disp_template.c 中,向下滚动,

(会出现很多错误提示,不用管。也可以先编译一次,让刚才启用的h文件生效,错误就会消失)

第86行到101行,LVGL 提供了创建显示缓冲区的3种方式,这里,必须3选1。

绝大多数情况下,使用第1种方法,即:只创建1个缓冲区;

  • 注释掉第90~101行,即:不使用第2和第3种方法;

完成后,是这个样子的:

6、关联 画点函数

还是在 lv_port_disp_template.c 中,向下滚动,找到disp_flush( )函数(我这里用的最新版本源文件,这个disp_flush( )函数的参数不一样,后面有更改方法)

  • 第173行,替换你的 LCD 的画点函数;  参数:x坐标、y坐标、16位颜色值。
  • 小编用的画点函数:LCD_DrawPoint( x, y, color_p->full) ;

你的画点函数,可能和小篇所用的不一样,照样画瓢即可。

完成后,是这个样子的:

这里给LVGL一个画点函数后, LVGL就能完成需要的显示操作了。

进阶技巧:提高刷屏效率

一般地,画点函数的底层操作:发送X坐标指令、X值、Y坐标指令、Y值、颜色值。

假如要刷320x240的整屏,至少传输14万次指令、14万次坐标值,7万次颜色值。

相当地耗时。

要是你的LCD驱动文件中,有区域填充颜色的函数,就能大量地减少指令、坐标值的发送次数。

下面是使用 魔女开发板 LCD驱动文件中所提供的 区域填充 函数,可以效仿参考。

  • LCD_DispFlush(area->x1, area->y1, area->x2, area->y2, (uint16_t*)color_p);

如果没有区域填充函数,不用强求,直接使用画点函数吧,先完成,再完善。

至此,显示部分的修改、注册,已完成。

点击编译:0 Erros。

7、disp_flush( )​​​​​​​函数不一样

6.其它配置 参考链接

https://blog.csdn.net/mucherry/article/details/126685909?spm=1001.2014.3001.5501

https://openatomworkshop.csdn.net/6645ae51b12a9d168eb6c98d.html 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

海南华志亿星电子商务有限公司电商服务的璀璨新星

在这个全民直播、短视频带货风起云涌的时代,抖音电商以其独特的魅力成为了众多商家竞相追逐的蓝海市场。而在这片波澜壮阔的商海中,海南华志亿星电子商务有限公司犹如一颗璀璨的新星,以其专业的服务、创新的策略,为无数商家照亮了…

动手学深度学习66 使用注意力机制的seq2seq

1. 使用注意力机制的seq2seq key value等价 是一个东西 第i个词rnn的输出 根据加权的不同,解码器前面用编码器前面的输出,到后面用后面的输出。 2. code 核心代码: context 怎么算 embedding没变,Decoder加了attention层 class Seq2SeqAt…

高校大数据实训平台介绍

高校大数据实验室架构 具体实训平台介绍 编程实训平台 1、大数据开发实训平台 大数据开发实训平台是面向实训课和课后训练的编程实训平台,平台底层基于Docker技术,采用容器云部署方案,预装大数据相关课程教学所需的实训环境…

【快速上手】pyspark 集群环境下的搭建(Yarn模式)

目录 前言: 一、安装步骤 安装前准备 1.第一步:安装python 2.第二步:在bigdata01上安装spark 3.第三步:同步bigdata01中的spark到bigdata02和03上 二、启动 三、可打开yarn界面查看任务 前言: 上一篇介绍的是…

【ARM Linux 系统稳定性分析入门及渐进 1.2 -- Crash 工具依赖内容】

文章目录 Prerequisites1. 内核对象文件2. 内存镜像3. 平台处理器类型4. Linux 内核版本 Prerequisites crash 工具需要依赖下面的内容: 1. 内核对象文件 vmlinux 文件:需要一个 vmlinux 内核对象文件,在本文中称为命名列表(na…

【Canal 中间件】Canal 实现 MySQL 增量数据的异步缓存更新

文章目录 一、安装 MySQL1.1 启动 mysql 服务器1.2 开启 Binlog 写入功能1.2.1创建 binlog 配置文件1.2.2 修改配置文件权限1.2.3 挂载配置文件1.2.4 检测 binlog 配置是否成功 1.3 创建账户并授权 二、安装 RocketMQ2.1 创建容器共享网络2.2 启动 NameServer2.3 启动 Broker2.…

Spring Boot2.x教程:(十)从Field injection is not recommended谈谈依赖注入

从Field injection is not recommended谈谈依赖注入 1、问题引入2、依赖注入的三种方式2.1、字段注入(Field Injection)2.2、构造器注入(Constructor Injection)2.3、setter注入(Setter Injection) 3、为什…

解决 ClickHouse 高可用集群中 VRID 冲突问题:基于 chproxy 和 keepalived 的实践分析

Part1背景描述 近期,我们部署了两套 ClickHouse 生产集群,分别位于同城的两个数据中心。这两套集群的数据保持一致,以便在一个数据中心发生故障时,能够迅速切换应用至另一个数据中心的 ClickHouse 实例,确保服务连续性…

【Android】View的事件分发机制

文章目录 分发顺序ActivityViewGroupView 协作方法整体流程注意 Activity事件分发ViewGroup事件分发View点击事件总结 分发顺序 Activity->ViewGroup->View Activity 分发事件:Activity 通过 dispatchTouchEvent 方法分发事件,首先尝试将事件传递…

java项目之微服务在线教育系统设计与实现(springcloud)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的闲一品交易平台。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 微服务在线教育系统设计与…

ChatGPT:真如吹的那般神乎其神吗?

ChatGPT的确是个神奇的东西。短短600多天,就已成全球访问量最大的网站之一。 ChatGPT已经出现在与这些大佬顶级大佬Google、Youtube、X.com、Baidu、Yahoo、amazon、Tiktok一起。 当然ChatGPT很优秀,这没有疑问,主要问题还是对度的把握上。…

【深度学习】实验 — 动手实现 GPT【二】:注意力机制、注意力掩码、多头注意力机制

【深度学习】实验 — 动手实现 GPT【二】:注意力机制、多头注意力机制 注意力机制简单示例:单个元素的情况简单示例:计算所有输入词元的注意力权重推广到所有输入序列词元: 注意力掩码代码实现多头注意力测试 注意力机制 简单示例…

简单的kafkaredis学习之kafka

简单的kafka&redis学习整理之kafka 1. kafka 1.1 什么是消息队列 在学习Kafka之前我们先来看一下什么是消息队列,消息队列(Message Queue):可以简称为MQ 例如:Java中的Queue队列,也可以认为是一个消息队列 消息队列&#x…

基于人工智能的搜索和推荐系统

互联网上的搜索历史分析和用户活动是个性化推荐的基础,这些推荐已成为电子商务行业和在线业务的强大营销工具。随着人工智能的使用,在线搜索也在改进,因为它会根据用户的视觉偏好提出建议,而不是根据每个客户的需求和偏好量身定制…

ssm042在线云音乐系统的设计与实现+jsp(论文+源码)_kaic

摘 要 随着移动互联网时代的发展,网络的使用越来越普及,用户在获取和存储信息方面也会有激动人心的时刻。音乐也将慢慢融入人们的生活中。影响和改变我们的生活。随着当今各种流行音乐的流行,人们在日常生活中经常会用到的就是在线云音乐系统…

TVS 静电管 选型

参数选型举例: 静电管选型举例: 针对信号引脚一般只需ESD防护,关注其在IEC 61000−4−2波形下的测试结果:最大耐压值、钳位电压等,注意此时钳位电压的限值就不是Absolute maximum ratings值了,原因有2 1、Absolute maximum ratings值是指持续加压会损坏芯片 2、如果关…

监控调度台在交通运输行业的优势?

在当今快速发展的交通运输行业中,高效、安全的管理成为确保运营顺畅和乘客满意的关键。监控调度台作为这一领域的核心设备,正发挥着越来越重要的作用。它集成了视频监控、数据分析、实时通讯等多种功能,为交通运输行业带来了诸多优势。下面我…

华为ENSP--ISIS路由协议

项目背景 为了确保资源共享、办公自动化和节省人力成本,公司E申请两条专线将深圳总部和广州、北京两家分公司网络连接起来。公司原来运行OSFP路由协议,现打算迁移到IS-IS路由协议,张同学正在该公司实习,为了提高实际工作的准确性和…

设计模式07-结构型模式2(装饰模式/外观模式/代理模式/Java)

4.4 装饰模式 4.4.1 装饰模式的定义 1.动机:在不改变一个对象本身功能的基础上给对象增加额外的新行为 2.定义:动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活 4.4.2 装饰模式的结构…

Spring @RequestMapping 注解

文章目录 Spring RequestMapping 注解一、引言二、RequestMapping注解基础1、基本用法2、处理多个URI 三、高级用法1、处理HTTP方法2、参数和消息头处理 四、总结 Spring RequestMapping 注解 一、引言 在Spring框架中,RequestMapping 注解是构建Web应用程序时不可…