【LVGL】STM32F429IGT6(在野火官网的LCD例程上)移植LVGL官方的例程(还没写完,有问题 排查中)

这里写目录标题

  • 前言
  • 一、本次实验准备
    • 1、硬件
    • 2、软件
  • 二、移植LVGL代码
    • 1、获取LVGL官方源码
    • 2、整理一下,下载后的源码文件
    • 3、开始移植
  • 三、移植显示驱动
    • 1、enable LVGL
    • 2、修改报错部分
    • 3、修改lv_config
    • 4、修改lv_port_disp.c文件
    • 到此步遇到的问题 Undefined symbol __aeabi_assert (referred from mbrtu.o).
      • 解决方法
    • 5.显示测试
      • c.配置定时器,在定时器中断中给lvgl 设置“心跳“ 或者直接用 滴答定时器作为心脏也行
        • 法一
        • 法二
      • 好,上一步结束,继续配置
    • main里最终是这样的
  • 还没写完,有问题 排查中。。。。

前言

记录一下我的移植过程,方便以后回头翻看

一、本次实验准备

1、硬件

一块野火的STM32F429IGT6开发板和7寸的触摸屏;

2、软件

  1. 官方的源码 hal库的,点击进入野火官网 下载源码
    在这里插入图片描述

  2. 把定时器中断实验的代码移植到触摸屏实验那里,用于后续给lvgl提供心跳时间 (如果移植后遇到Error: L6218E:在文件中添加stm32f10x_tim.c即可)

    我发现例程里已经有了,可以直接include头文件。

在这里插入图片描述

  1. 将程序下载进开发板,触摸显示正常即可
    这款板子如果要触摸正常,则要把代码中的宏修改一下
    在这里插入图片描述
    具体操作:
    #define LCD_TOUCH_IC_GT1151QM 注释掉。这样触摸屏才能有效果。
    在这里插入图片描述
    就可以画出

    在这里插入图片描述


二、移植LVGL代码

1、获取LVGL官方源码

点击此处,进入github 下载源码
在这里插入图片描述

此处以8.2.0为例

在这里插入图片描述

2、整理一下,下载后的源码文件

a. 我们暂时只需要,这5个文件,复制到新的文件夹中

在这里插入图片描述
在这里插入图片描述

b. 为减少内存的消耗,我们再细一点,把需要的文件单拎出来
examples文件夹中的,porting文件夹
demos文件夹中的,keypad_encoder文件夹、 lv_demos.h文件、lv_demos.mk 文件 

在这里插入图片描述

c.规范化一下,把文件重名,把_template去掉

在这里插入图片描述
在这里插入图片描述

3、开始移植

a.在野火触摸屏历程中新建一个文件夹,存放lvgl的源码

在这里插入图片描述

b.keil工程中,点开魔术棒,勾选C99;然后把Lvgl中的文件夹都加到头文件路径中(基本操作)

在这里插入图片描述

c.点开工程目录管理器,添加所需的文件夹
LVGL_SRC (用来存放lvgl源码)
LVGL_POR(用来配置lvgl接口文件)
LVGL_DEMO(用来配置lvgl官方例程)
LVGL_APP(用来存放用户自己的lvgl代码)

在这里插入图片描述

d.对号入座,往各个文件夹里添加所需的文件

在这里插入图片描述
提示:src文件有点多。。。多到离谱。要一个个文件夹点开,把.c文件都加进来,src中extra文件里面有许多子文件!!!全都要进来

文件夹src 加入到 LVGL_SRC
文件夹porting加入到LVGL_PORT,包括lvgl文件夹中的 lvgl.h lv_conf.h 和 lv_demos.h
文件夹keypad_encoder添加到LVGL_DEMO

三、移植显示驱动

1、enable LVGL

将 lv_port_disp.c 、 lv_port_disp.h 、 lv_port_indev.c 、 lv_port_indev.h、 lv_conf.h 中的if 0改成 if 1
lv_port_fs.c暂时用不到,先不修改

在这里插入图片描述

2、修改报错部分

a.编译一下,有很多个error,没事,我们一个个改
(1)我们之前规范化把文件名字修改了,所以把头文件中的_template都去掉
(2)将…/…/去掉

直接 ctrl+F 全局替换一下

在这里插入图片描述

3、修改lv_config

我们自己添加 屏幕分辨率。

在这里插入图片描述

#define MY_DISP_HOR_RES 800
#define MY_DISP_VER_RES 480

在这里插入图片描述

4、修改lv_port_disp.c文件

在这里插入图片描述

往下拉修改分辨率,把刚刚定义的宏 替换过去
disp_drv.hor_res = MY_DISP_HOR_RES;
disp_drv.ver_res = MY_DISP_VER_RES;

到此步遇到的问题 Undefined symbol __aeabi_assert (referred from mbrtu.o).

AirPressure\AirPressure.axf: Error: L6218E: Undefined symbol __aeabi_assert (referred from mbrtu.o).

在这里插入图片描述

解决方法

在这里插入图片描述


5.显示测试

a.修改主函数,留下必要的初始化函数

在这里插入图片描述

b.打开使能demo的宏,在lv_conf里

在这里插入图片描述

c.配置定时器,在定时器中断中给lvgl 设置“心跳“ 或者直接用 滴答定时器作为心脏也行

法一

在这里插入图片描述

法二
配置定时器,在定时器中断中给lvgl 设置“心跳“

参考这个链接!!野火官网的教程

在定时器中断函数中添加lvgl心跳(#include “lvgl.h”)
/**
  * @brief  定时器中断服务函数
  * @param  无
  * @retval 无
  */
 void  BASIC_TIM_IRQHandler (void)
 {
     HAL_TIM_IRQHandler(&TIM_TimeBaseStructure);
 }
 
 
 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
 {
     if (htim==(&TIM_TimeBaseStructure)) 
			{
					lv_tick_inc(1);//lvgl的1ms中断
					LED1_TOGGLE;  //红灯周期闪烁
     }
 }

好,上一步结束,继续配置

d.在主函数中添加lvgl相关头文件
#include "lvgl.h"
#include "lv_port_disp.h"
#include "lv_port_indev.h"
#include "lv_demo_keypad_encoder.h"
e.在while循环中,调用lvgl事务处理函数
 lv_task_handler(); // lvgl的事务处理
f.在main中添必要函数
lv_init();
lv_port_disp_init();//lvgl显示接口初始化,放在lvgl_init()的后面
lv_port_indev_init();//lvgl输入接口初始化,放在lvgl_init()的后面
lv_demo_keypad_encoder();
g.将堆栈改大一点

在这里插入图片描述

main里最终是这样的

在这里插入图片描述

还没写完,有问题 排查中。。。。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker中部署ElasticSearch 和Kibana,用脚本实现对数据库资源的未授权访问

图未保存,不过文章当中的某一步骤可能会帮助到您,那么:感恩! 1、docker中拉取镜像 #拉取镜像 docker pull elasticsearch:7.7.0#启动镜像 docker run --name elasticsearch -d -e ES_JAVA_OPTS"-Xms512m -Xmx512m" -e…

数字图像处理(实践篇)二十一 人脸识别

目录 1 安装face_recognition 2 涉及的函数 3 人脸识别方案 4 实践 使用face_recognition进行人脸识别。 1 安装face_recognition pip install face_recognition 或者 pip --default-timeout100 install face_recognition -i http://pypi.douban.com/simple --trusted-…

c#读取XML文件实现晶圆wafermapping显示demo计算电机坐标控制电机移动

c#读取XML文件实现晶圆wafermapping显示 功能: 1.读取XML文件,显示mapping图 2.在mapping视图图标移动,实时查看bincode,x,y索引与计算的电机坐标 3.通过设置wafer放在平台的位置x,y轴电机编码值,相机在wafer的中心位置&#…

类与接口常见面试题

抽象类和接口的对比 抽象类是用来捕捉子类的通用特性的。接口是抽象方法的集合。 从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。 相同点 接口和抽象类都不能实例化都位于继承的顶端…

每日一题,头歌平台c语言题目

任务描述 题目描述:输入一个字符串,输出反序后的字符串。 相关知识(略) 编程要求 请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。 输入 一行字符 输出 逆序后的字符串 测试说明 样例输入&…

老师们居然这样把考试成绩发给家长

教育是一个复杂而多元的过程,其中考试成绩的发布和沟通是教育过程中的一个重要环节。然而,有些老师在发布考试成绩时,采取了一些不恰当的方式,给家长和学生带来了不必要的困扰和压力。本文将探讨老师们不应该采取的发布考试成绩的…

六级高频词组1

目录 词组 参考链接 词组 1. abide by(be faithful to ;obey)忠于;遵守。 2. be absent from… 缺席,不在 3. absence or mind(being absent-minded) 心不在焉 4. absorb(take …

进程的同步和异步、进程互斥

一、进程同步和异步 同步(Synchronous): 同步指的是程序按照顺序执行,一个操作完成后才能进行下一个操作。在多进程或多线程的环境中,同步意味着一个进程(或线程)在执行某个任务时,…

大致人类应该是短时记忆和利用短时记忆控制利用周围环境达到长期记忆的吧

这里写目录标题 图代码代码解析图 代码 import timedef route_llm(route_text):passdef write_to_dask(one_sum, one_text, one_path

每日一题 1631. 最小体力消耗路径(中等,最小最大值)

最小最大值问题,二分答案搜索heights的最大值为106,所以右边界为106,左边界为0,通过dfs来判断是否存在一条路径,其中所有的相邻格子的高度差绝对值小于左右边界的中点 class Solution:def minimumEffortPath(self, he…

AI自动生成代码工具

AI自动生成代码工具是一种利用人工智能技术来辅助或自动化软件开发过程中的编码任务的工具。这些工具使用机器学习和自然语言处理等技术,根据开发者的需求生成相应的源代码。以下是一些常见的AI自动生成代码工具,希望对大家有所帮助。北京木奇移动技术有…

记录 | linux静态库和动态库的理解

hello.cpp&#xff1a; #include <cstdio>void hello() {printf("Hello, world!\n"); }main.cpp&#xff1a; #include <cstdio>void hello();int main() {hello();return 0; }静态库编译配置&#xff1a; cmake_minimum_required(VERSION 3.12) proj…

Xmanager

什么是 XManager Xmanager 是市场上领先的 PC X 服务器&#xff0c;可将X应用程序的强大功能带入 Windows 环境。 提供了强大的会话管理控制台&#xff0c;易于使用的 X 应用程序启动器&#xff0c;X 服务器配置文件管理工具&#xff0c;SSH 模块和高性能 PC X 服务器。 Xman…

果然,做年终报告还是得看大数据分析工具

一年一度的年终报告比拼有要开始了。听一句劝&#xff0c;今年的年终报告还是用大数据分析工具来做吧&#xff01;将年终报告做成BI大数据分析报表&#xff0c;能直截了当总结分析过去一年的数据情况不说&#xff0c;还能在会议上随时切换分析维度&#xff0c;随时从不同的维度…

java--LocalDate、LocalTime、LocalDateTime、ZoneId、Instant

1.为什么要学习JDK8新增的时间 LocalDate&#xff1a;代表本地日期(年、月、日、星期) LocalTime&#xff1a;代表本地时间(时、分、秒、纳秒) LocalDateTime&#xff1a;代表本地日期、时间(年、月、日、星期、时、分、秒、纳秒) 它们获取对象的方案 2.LocalDate的常用API(…

软件测试之缺陷管理

一、软件缺陷的基本概念 1、软件缺陷的基本概念主要分为&#xff1a;缺陷、故障、失效这三种。 &#xff08;1&#xff09;缺陷&#xff08;defect&#xff09;&#xff1a;存在于软件之中的偏差&#xff0c;可被激活&#xff0c;以静态的形式存在于软件内部&#xff0c;相当…

Vue快速入门教程

什么是Vue&#xff1f; 1&#xff0c;vue是一套前端框架&#xff0c;免除原生JavaScrip中dom操作&#xff0c;简化书写。 2&#xff0c;给予MVVM&#xff08;Model-View-ViewModel&#xff09;思想&#xff0c;实现数据的双向绑定&#xff0c;将编程的关注点放在数据上 官网&a…

漏洞复现--速达进存销管理系统任意文件上传

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

python:六种算法(DBO、RFO、WOA、GWO、PSO、GA)求解23个测试函数(python代码)

一、六种算法简介 1、蜣螂优化算法DBO 2、红狐优化算法RFO 3、鲸鱼优化算法WOA 4、灰狼优化算法GWO 5、粒子群优化算法PSO 6、遗传算法GA 二、6种算法求解23个函数 &#xff08;1&#xff09;23个函数简介 参考文献&#xff1a; [1] Yao X, Liu Y, Lin G M. Evolution…

关于粒子群算法的一些简单尝试

粒子群算法核心思想&#xff1a;&#xff08;鸟 粒子&#xff09; &#xff08;1&#xff09;许多的鸟站在不同的地方&#xff1b; &#xff08;2&#xff09;每一只鸟都有自己寻找食物的初始飞行方向、飞行速度&#xff1b; &#xff08;3&#xff09;这些鸟儿每隔一段时间…