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

news2024/12/28 18:36:51

这里写目录标题

  • 前言
  • 一、本次实验准备
    • 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里最终是这样的

在这里插入图片描述

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

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

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

相关文章

C语言中的一维数组与二维数组

目录 一维数组数组的创建初始化使用在内存中的存储 二维数组创建初始化使用在内存中的存储 数组越界 一维数组 数组的创建 数组是一组相同类型元素的集合。 int arr1[10]; char arr3[10]; float arr4[10]; double arr5[10];下面这个数组能否成功创建? int count…

python简易学生管理 + MySQL

数据库表 Python代码部分 import pymysqlclass StMgmt(object):def tips(self):"""提示用户选择的操作"""print("""学生管理系统 1.01.查看所有信息2.查看学生信息3.修改学生信息4.增加学生信息5.退出学生系统"""…

SPI 通信-stm32入门

本节我们将继续学习下一个通信协议 SPI,SPI 通信和我们刚学完的 I2C 通信差不多。两个协议的设计目的都一样,都是实现主控芯片和各种外挂芯片之间的数据交流,有了数据交流的能力,我们主控芯片就可以挂载并操纵各式各样的外部芯片&…

C语言-枚举

常量符号化 用符号而不是具体的数字来表示程序中的数字 枚举 用枚举而不是定义独立的const int变量 枚举是一种用户定义的数据类型,他用关键词enum以如下语法来声明: enum枚举类型名字{名字0,…,名字n}; 枚举类型名…

Q_GDW1819-2013电压监测装置协议结构解析

目录 一 专业术语二 基本功能2.1 基础功能2.2 数据存储2.3 显示功能(设备能够看到的)2.4 参数设置与查询2.5 事件检测与告警功能 三 其他内容3.1 通信方式3.2 通信串口 四 帧结构解析4.1 传输方式4.2 数据帧格式4.2.1 报文头(2字节&#xff0…

《深入理解计算机系统》学习笔记 - 第四课 - 浮点数

Floating Point 浮点数 文章目录 Floating Point 浮点数分数二进制示例能代表的数浮点数的表示方式浮点数编码规格化值规格化值编码示例 非规格化的值特殊值 示例IEEE 编码的一些特殊属性四舍五入,相加,相乘四舍五入四舍五入的模式二进制数的四舍五入 浮…

如何通过SPI控制Peregrine的数控衰减器

概要 Peregrine的数控衰减器PE4312是6位射频数字步进衰减器(DSA,Digital Step Attenuator)工作频率覆盖1MHz~4GHz,插入损耗2dB左右,衰减步进0.5dB,最大衰减量为31.5dB,高达59dBm的IIP3提供了良好的动态性能,切换时间0.5微秒,供电电源2.3V~5.5V,逻辑控制兼容1.8V,20…

【Python】修改pip 默认安装位置

使用pip安装的时候,一般是默认安装在c盘里的。这样做很容易会让c盘的文件堆满。那么如何让pip安装的包放入d盘呢? 查看pip默认安装的位置 在cmd里输入python -m site,这里可以看到,安装包会默认下载到c盘中 从这里可以看到&am…

openGauss学习笔记-152 openGauss 数据库运维-备份与恢复-物理备份与恢复之PITR恢复

文章目录 openGauss学习笔记-152 openGauss 数据库运维-备份与恢复-物理备份与恢复之PITR恢复152.1 背景信息152.2 前提条件152.3 PITR恢复流程152.4 recovery.conf文件配置**152.4.1 归档恢复配置****152.4.2 恢复目标设置** openGauss学习笔记-152 openGauss 数据库运维-备份…

AICore 带来了 Android 专属的 AI 能力,它要解决什么?采用什么架构思路?

前言 Google 最近发布的 Gemini 模型在全球引起了巨大反响,其在多模态领域的 Video demo 无比震撼。对于 Android 开发者而言,其中最振奋人心的消息莫过于 Gemini Nano 模型将内置到 Android 系统当中,并开放给开发者使用。 事实上&#xf…

三哥的黑科技,印度发布无线加热服装专利,冬季神器要来了

众所周知风和自由在冬天是不存在的,冬天只剩下冰冷的像刀子一样的风刮在你的脸上,哪怕穿的很厚,戴上全盔,也无法阻挡冰冷的风带走你身体温度,如果穿的特别多,骑车时候的舒适感和穿脱衣物的繁琐也是一大头疼…

用23种设计模式打造一个cocos creator的游戏框架----(十三)模板方法模式

1、模式标准 模式名称:模板方法模式 模式分类:行为型 模式意图:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。Template Method 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 结构图&#xff1a…

LIS检验系统,涵盖实验室全部管理流程,适合各种实验机构的业务流程

LIS检验系统源码,云LIS医学检验系统源码 LIS检验系统涵盖实验室的全部管理流程,包括从检验申请、标本采集、实验检测、报告发布的、质控管理、科室事务、试剂管理等完整流程的功能,实现智能化、自动化、规范化管理,遵循医学实验室…

人工智能的技术演进与未来趋势

人工智能的技术演进与未来趋势 一、引言 人工智能(AI)已经成为当今科技领域的热门话题,其在各个行业的应用越来越广泛。从智能语音助手到自动驾驶汽车,从智能家居系统到医疗诊断,AI技术已经深入到我们的日常生活。在…

排序算法:【插入排序】

一、插入排序:时间复杂度、原地排序 原理:可以想象成打扑克牌时候,发到手里的牌,我们一张一张拿起来插到手里牌的适当位置。 将待排序列表的第一个元素看作是一个有序序列(或叫有序区),然后从第…

坚守数字化创新烽火之地 百望云入选新华社“品牌信用建设典型案例”

潮起海之南,风好正扬帆。2023年12月2日-5日,南海之滨,由新华通讯社、海南省人民政府、中国品牌建设促进会主办的主题为“聚焦新质生产力,增强发展新动能”的2023中国企业家博鳌论坛在海南博鳌隆重举行。 群贤毕至,高朋…

推荐3dmax常用15款插件,快来了解一下吧!

推荐3dmax常用15款插件,快来了解一下吧! 插件是3ds MAX软件的重要组成部分,提供了太多便利,也提升了建模、渲染和动画的效率,下面就给大家推荐25款常用的3dMax插件。 1)DashedShape DashedShape实线转虚线…

树莓派上电发送IP地址到邮箱

创建python脚本文件 auto_send_email.py #!/usr/bin/python3import subprocess import smtplib from email.mime.text import MIMEText import datetime import time import osdef check_ping():hostname "www.baidu.com"response os.system("ping -c 1 &quo…

Redis对象——内存回收,对象共享和空转时长

一. 内存回收 因为C语言不具备内存回收功能,所以Redis在自己的对象系统中构建了一个引用计数技术实现内存回收机制。通过这一机制,程序可以通过跟踪对象的引用计数信息,在适当的时候自动释放对象并进行内存回收。 内每一个对象的引用计数信息…

2024美赛备战2--模型建立(*****必看****)

建模 美赛涉及的建模知识范围非常广且深,纵观美赛真题不难发现,很多的模型 都是读研或者读博的时候才会真正深入开始研究,因此,对于做建模的同学来说, 是无法在赛前吃透大量模型的。推荐本科生分两个步骤去有效准备比赛…