天空星LVGL移植记录

一、移植的LVGL版本8.2

下载地址:(网页下个加速脚本)GitHub - lvgl/lvgl: Embedded graphics library to create beautiful UIs for any MCU, MPU and display type.icon-default.png?t=N7T8https://github.com/lvgl/lvgl

二、硬件设备

天空星STM32F407VET6

ILI9341 2.4寸 SPI驱动 320*240分辨率

沿用上次的OV7670的拓展板(LCD接线按如图接就行,不用管按键和OV7670)

三、要求

(1)对flash等有一定要求,最低64kb flash,具体自行百度。

(2)要有定时器和LCD驱动的程序模板,在此基础上进行移植,需要配置一个定时器为LVGL提供心跳触摸不是必要的,如果需要移植触摸那么就必须要有触摸源码,我这里放置一个天空星标准库的触摸源码:

F407VET6天空星/天空星STM32F407-2.8寸与3.2寸ILI9341彩屏移植成功案例.zip · lovefoolnotme/单片机 - 码云 - 开源中国 (gitee.com)icon-default.png?t=N7T8https://gitee.com/lovefoolnotme/singlechip/blob/master/F407VET6%E5%A4%A9%E7%A9%BA%E6%98%9F/%E5%A4%A9%E7%A9%BA%E6%98%9FSTM32F407-2.8%E5%AF%B8%E4%B8%8E3.2%E5%AF%B8ILI9341%E5%BD%A9%E5%B1%8F%E7%A7%BB%E6%A4%8D%E6%88%90%E5%8A%9F%E6%A1%88%E4%BE%8B.zip(3)其实也就是内存大点,有个驱动LCD的画点或者填充函数就可以移植,只需要再开一个定时器来做心跳

四、参考网址:

快速入门LVGL(基于STM32,LVGL 8.2.0)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/mucherry/article/details/126685909STM32移植LVGL8.0.2超详细的保姆级教程附移植好的工程文件_stm32 lvgl教程-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_42111891/article/details/124989266STM32移植LVGL踩坑集锦_lvgl内存不足-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_53000374/article/details/127946043移植时主要跟第一个网址,遇到问题时再查看其他网址。

五、移植成功的模板(刷新慢,慎用)

demo:keypad_encoder

我用夸克网盘分享了「移植成功的LVGL.rar」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。
链接:https://pan.quark.cn/s/313608107a23

六、移植过程简记(不适宜初次移植)

(1)在工程新建一个lvgl文件夹,里面包括这几个文件

(2)keil设置C99

(3)加入路径

(4)创建四个文件夹

*SRC中加入所有的.c文件,注意多级文件夹,小心移植(100多个)

*POR中加入下列文件

disp涉及显示部分代码,indev涉及输入设备代码

*DEMO中加入要运行的例子

*APP暂时不管,后面放置自己加入的文件

(5)由于改过文件名字,需要在keil中修改头文件名字。

先编译,查看报错的头文件,使用ctrl+f作用整个过程快速替换头文件名字。

(6)打开显示、输入、配置文件宏

在这几个文件的最开头把0切换为1启用显示,输入,配置。

(7)添加分辨率

下面的颜色深度也是需要注意的点

 这里只是宏定义,需要把它输入到实际代码处:注释EXAMPLE2和3,将自己定义的分辨率添加

(8)添加接口函数

此处用的画点的方式比较慢,后面想办法改成图中注释的方法会更快(填充),使用这个函数记得添加头文件

 (9)打开DEMO的宏

(10)串口函数的 _sys_exit函数前需要有void(有这个函数的情况下)

(11)堆栈可以改大一点

 (12)按下图主函数测试

定时器生成1ms的中断用于给LVGL提供心跳

/** 立创开发板软硬件资料与相关扩展板软硬件资料官网全部开源* 开发板官网:www.lckfb.com* 技术支持常驻论坛,任何技术问题欢迎随时交流学习* 立创论坛:https://oshwhub.com/forum* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!* 不靠卖板赚钱,以培养中国工程师为己任* Change Logs:* Date           Author       Notes* 2024-03-15     LCKFB-LP    first version*/
#include "board.h"
#include "bsp_uart.h"
#include <stdio.h>
#include "lcd.h"
#include "gui.h"
#include "test.h"
#include "touch.h"#include "lvgl.h"
#include "lv_port_disp.h"
#include "lv_port_indev.h"
#include "lv_demo_keypad_encoder.h"void Led_Init(void);
void TIM_Init(void);int main(void)
{board_init();uart1_init(115200U);Led_Init();LCD_Init();           //液晶屏初始化TIM_Init();tp_dev.init();lv_init();lv_port_disp_init();  // lvgl显示接口初始化,放在lv_init()的后面lv_port_indev_init(); // lvgl输入接口初始化,放在lv_init()的后面lv_demo_keypad_encoder();while(1){
//		main_test();        //测试主界面
//		Test_Color();              //简单刷屏填充测试
//		Test_FillRec();            //GUI矩形绘图测试
//		Test_Circle();             //GUI画圆测试
//		Test_Triangle();    //GUI三角形绘图测试
//		English_Font_test();//英文字体示例测试
//		Chinese_Font_test();//中文字体示例测试
//		Pic_test();         //图片显示示例测试
//		Rotate_Test();           //旋转显示测试/* 如果不带触摸,或者不需要触摸功能,请注释掉下面触摸屏测试项 */
//		Touch_Test();       //触摸屏手写测试  lv_task_handler(); // lvgl的事务处理GPIO_SetBits(GPIOB,GPIO_Pin_2);delay_ms(500);GPIO_ResetBits(GPIOB,GPIO_Pin_2);delay_ms(500);}}void TIM_Init(void)
{//2.初始化TIMERTIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//3.打开定时器时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);TIM_TimeBaseStructure.TIM_ClockDivision=0x00;   //不分频TIM_TimeBaseStructure.TIM_Prescaler=84-1;       //84分频  84MHZ/84=1MHZTIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;  //向上计数TIM_TimeBaseStructure.TIM_RepetitionCounter=0;  //不重复计数TIM_TimeBaseStructure.TIM_Period=1000-1;        //周期为1000,T=1000*(1/f)=1000*(1/1M)=1msTIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);//4.允许定时器中断TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//5.配置中断NVIC_InitTypeDef NVIC_InitStucture;NVIC_InitStucture.NVIC_IRQChannel=TIM3_IRQn;NVIC_InitStucture.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStucture.NVIC_IRQChannelPreemptionPriority=0x01;NVIC_InitStucture.NVIC_IRQChannelSubPriority=0x01;NVIC_Init(&NVIC_InitStucture);    //6.开启定时器TIM_Cmd(TIM3,ENABLE);
}//7.中断服务函数
void TIM3_IRQHandler(void)
{
//8.判断定时器3是否中断if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET){
//9.清除定时器3的中断标志位TIM_ClearITPendingBit(TIM3,TIM_IT_Update);lv_tick_inc(1);//lvgl的1ms中断}
}void Led_Init(void)
{//1.定义结构体GPIO_InitTypeDef  GPIO_InitStructure;//2.打开时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//3.配置结构体五项参数GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//4.对于配置初始化GPIO_Init(GPIOB, &GPIO_InitStructure);
}

 到现在为止没有移植触摸,可以将上述主函数中的触摸部分代码移除,如果能运行成功再移植触摸,附上运行成功效果图(这个例子为横向显示,切换显示方向为横向):

(13)触摸移植不是很了解,后面再说,上面给的网址有移植教程

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

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

相关文章

vue3中provide 和 inject 用法#Vue3中解决局部刷新问题

vue3中provide 和 inject 用法#Vue3中解决局部刷新问题 在父子组件传递数据时&#xff0c;通常使用的是 props 和 emit&#xff0c;父传子时&#xff0c;使用的是 props&#xff0c;如果是父组件传孙组件时&#xff0c;就需要先传给子组件&#xff0c;子组件再传给孙组件&…

【JavaScript 算法】KMP算法:高效的字符串匹配

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、算法原理部分匹配表的构建 二、算法实现构建部分匹配表KMP字符串匹配注释说明&#xff1a; 三、应用场景四、总结 KMP算法&#xff08;Knuth-Morris-Pratt Algorithm&#xff09;是一种用于在文本中高效查找子串的字符串…

昇思学习打卡-21-生成式/Diffusion扩散模型

文章目录 Diffusion扩散模型介绍模型推理结果 Diffusion扩散模型介绍 关于扩散模型&#xff08;Diffusion Models&#xff09;有很多种理解&#xff0c;除了本文介绍的离散时间视角外&#xff0c;还有连续时间视角、概率分布转换视角、马尔可夫链视角、能量函数视角、数据增强…

【BUG】已解决:AttributeError: ‘DataFrame‘ object has no attribute ‘append‘

已解决&#xff1a;AttributeError: ‘DataFrame‘ object has no attribute ‘append‘ 目录 已解决&#xff1a;AttributeError: ‘DataFrame‘ object has no attribute ‘append‘ 【常见模块错误】 错误原因&#xff1a; 解决办法&#xff1a; 欢迎来到英杰社区https:/…

215. 数组中的第K个最大元素 347. 前 K 个高频元素(LeetCode热题100)

215. 数组中的第K个最大元素 - 力扣&#xff08;LeetCode&#xff09; 写个快排&#xff0c;使数组升序&#xff0c;返回倒数第k个元素即可 func quickSort(nums []int, l int, r int) {if l > r {return}x : nums[(l r) / 2]i : l - 1j : r 1for i < j {for {iif n…

[力扣Java解题分享]12.74搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。…

大鲸鱼docker-compose单机容器集群编排工具

目录 一、Docker-compose 概述 二、Docker-compose简介 三、YML文件格式及编写注意事项 1.yml文件是什么 2.yml问价使用注意事项 3.yml文件的基本数据结构 四、Docker-compose 配置 1.Docker-Compose 配置常用字段 2.Docker Compose常用命令 3.使用Docker-compose创建…

【笔记:3D航路规划算法】一、随机搜索锚点(python实现,讲解思路)

目录 关键概念3D路径规划算法1. A*算法2. 快速随机锚点1. 初始化&#xff1a;2. 实例化搜索算法&#xff1a;3. 路径生成&#xff1a;4. 绘制图像&#xff1a; 3D路径规划是在三维空间中寻找从起点到终点的最短或最优路径的一种技术。它广泛应用于无人机导航、机器人运动规划、…

【医学影像】X86+FPGA:支持AI医学影像设备应用的工控主板,赋能CT、MRI、X线、超声等医学影像设备

支持AI医学影像设备应用的工控主板 在我国人口老龄化问题不断加剧&#xff0c;对影像诊断需求持续增长&#xff0c;和国家利好高端医学影像市场发展的系列法规和政策接连出台的大环境下&#xff0c;AI医学影像设备产业迎来发展黄金期。紧跟发展大势&#xff0c;基于12/13代 In…

Federated Graph Augmentation for Semisupervised Node Classification

文章目录 1 本文的主要贡献2 FedGA 模型3 FedGA-L 模型3.1 模型的思想3.2 模型具体步骤 4 实验 1 本文的主要贡献 解决图联邦学习中利用图拓扑结构和无标签节点数据的难题&#xff0c;提出了一种称为联合图增强(FedGA)的新方法&#xff0c;以更好地利用拓扑信息&#xff0c;然…

【python学习】python的知识点总结、特点和思考及解答(代码示例)

引言 python 是一种高级编程语言&#xff0c;具有简洁的语法和丰富的库&#xff0c;被广泛应用于Web开发、数据分析、人工智能、科学计算等领域 文章目录 引言一、python知识点总结1.1 基础语法1.1.1 变量和数据类型1.1.2 控制结构1.1.3 函数和模块 1.2 面向对象编程1.2.1 类和…

如何通过成熟的外发平台,实现文档安全外发管理?

文档安全外发管理是企业信息安全管理的重要组成部分&#xff0c;它涉及到企业向外发送的文件&#xff0c;需要进行严格的控制和管理&#xff0c;防止敏感或机密信息的泄露。以下是一些关键考虑因素&#xff1a; 文件外发的挑战&#xff1a;企业在文件外发时面临的主要挑战包括…

wls2下的centos使用桥接模式连接宿主机网络独立静态ip

前提&#xff1a;wsl2已安装&#xff0c;可正常更新 1.在控制面板中&#xff0c;打开开启或关闭windows功能&#xff0c;将里面的 Hyper-V功能打开&#xff0c;此处涉及重启 2. 按一下win键&#xff0c;输入hy&#xff0c;上面可以看到Hyper-V Manager,点进去 3.选择右边的 Vi…

Fiddler抓包

一个不错的文档&#xff1a;萌新要入行-CSDN博客 测试之路&#xff1a;3年经验来面试20K的测试岗&#xff0c;连基本功都不会&#xff0c;还不如去招应届生 Fiddler教程&#xff1a;https://www.cnblogs.com/zhangyangcheng/articles/15218175.html Fiddler安装教程&#xff1…

F5理念左移,实现API安全的全生命周期管理

API是我们现代数字生活中隐形的中枢神经系统&#xff0c;从远程医疗到在线银行&#xff0c;实时API让世界变得更美好。不可否认的是&#xff0c;当应用程序和架构发生变化时&#xff0c;攻击面也会随之变化。传统的安全措施&#xff0c;比如WAF、DDoS和Bot防护仍然必不可少&…

java中传引用问题

在 Java 中&#xff0c;所有对象都是通过引用传递的&#xff0c;而基本数据类型是通过值传递的。 引用传递&#xff1a; 当一个对象作为参数传递给方法时&#xff0c;传递的是对象的引用。对这个对象引用进行的修改会影响到原始对象。例如&#xff1a; public class Test {p…

在eclipse中使用Junit单元测试的准备工作和基本介绍

JUnit准备工作和基本介绍 JUnit是一个Java语言的单元测试框架。。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。 Junit 测试也是程序员测试&#xff0c;即所谓的白盒测试&#xff0c;它需要程序员知道被测试的代码如何完成功能&#xff0c;以及完成什么样的功能 …

Ubuntu24.04 NFS 服务配置

1、NFS 介绍 NFS 是 Network FileSystem 的缩写&#xff0c;顾名思义就是网络文件存储系统&#xff0c;它允许网络中的计算机之间通过 TCP/IP 网络共享资源。通过 NFS&#xff0c;我们本地 NFS 的客户端应用可以透明地读写位于服务端 NFS 服务器上的文件&#xff0c;就像访问本…

宠物空气净化器哪款品牌好?口碑好的猫用空气净化器排名

猫咪每年掉毛两次&#xff0c;一次掉半年的现象真让人头疼。作为一位5年资深铲屎官&#xff0c;特别是在掉毛季节&#xff0c;猫毛无处不在&#xff0c;对此深有体会。宠物空气净化器已成为铲屎官们的救星&#xff0c;能迅速清理家中的宠物毛发和异味&#xff0c;是养猫家庭的必…

关于APPCRASH的问题处理

最近小编遇到了APPCRASH的问题,打开任意一个exe可执行文件运行时候,windows记录是APPCRASH的问题. 因为是第一次遇到,当时就懵逼了,通过查找资料,现在把这类问题总结一下: 1.软件不兼容引起的crash,通常我们启用兼容性运行就可以解决,前提是以前在其他版本的系统上运行,现在换…