天空星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;子组件再传给孙组件&…

C#面:阐述什么是razor view engine?

Razor View Engine是ASP.NET MVC框架中的一种视图引擎&#xff0c;用于生成动态的HTML页面。它是一种基于文本的模板引擎&#xff0c;允许开发人员在HTML中嵌入C#代码&#xff0c;以便动态生成页面内容。 Razor View Engine具有以下特点&#xff1a;简洁易读&#xff1a;Razor…

【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路径规划是在三维空间中寻找从起点到终点的最短或最优路径的一种技术。它广泛应用于无人机导航、机器人运动规划、…

蓝牙新篇章:WebKit的Web Bluetooth API深度解析

蓝牙新篇章&#xff1a;WebKit的Web Bluetooth API深度解析 在物联网(IoT)时代&#xff0c;Web应用与物理设备的交互变得越来越重要。WebKit的Web Bluetooth API开启了一个新时代&#xff0c;允许Web页面直接与蓝牙设备通信。这一API不仅提高了用户体验&#xff0c;还为创新的…

Python爬虫——1爬虫基础(一步一步慢慢来)

一、爬虫是什么&#xff1f; &#xff08;spider&#xff09; Python 爬虫是利用编程语言 Python 来获取互联网上的数据的技术。它可以自动化地访问网页、提取信息并进行数据处理。以下是Python爬虫的基础知识和步骤&#xff1a; 主要特点和功能&#xff1a; 自动化浏览&#…

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

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

开放开源开先河(三)

伴随开源生态快速发展壮大、开源项目数量爆发式增长的是国家层面对开源的鼓励和推动。2020被业界称为开源爆发年&#xff0c;本年度的“木兰协议”正式成为国际化开源许可证&#xff0c;工信部联合全球知名开源平台Gitee建设中国独立的开源托管平台。2021年3月&#xff0c;开源…

Federated Graph Augmentation for Semisupervised Node Classification

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

试编写函数fun的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。

代码如下&#xff1a; #include <stdio.h> #include <math.h> void fun(int a, int *b, int *c) { int i,j,d,y;for (i3;i<a/2;ii2){y1; //y为标志变量for (j2;j<sqrt((double)i );j)if (i%j0) y0;if (y1){da-i; for (j2;j<sqrt((double)d );j)…

03Spring底层架构核心概念解析

为了感谢罕哥对我工作的帮助&#xff0c;特此记录下学习过程&#xff0c;期待成为和罕哥一样优秀的人 时间&#xff1a;2024.7.13 内容&#xff1a;spring源码课程3学习记录 一、BeanDefinition BeanDefinition表示Bean的定义&#xff0c;BeanDefinition中存在很多属性用来…

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

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

Linux CAN数据收发

在Linux环境下&#xff0c;使用SocketCAN进行CAN消息的发送和接收通常涉及到socket编程。 写了一个简单的示例&#xff0c;展示了如何实现CAN消息的发送&#xff08;tx&#xff09;和接收&#xff08;rx&#xff09;函数。 1. 包含必要的头文件 #include <stdio.h> …

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

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

Windows 电脑装机软件推荐

1.系统辅助&#xff1a; https://github.com/microsoft/PowerToys/releases 2.下载工具&#xff1a; Motrix