使用RT-Thread studio 把LVGL移植到RT-Thread 上

2023-11-14

使用RT-Thread studio 移植 LVGL到RT-Thread中

其实RT-Thread 移植LVGL 官方已经出来很多教程,但是但是他出的教程都是基于一些他们适配的BSP,但是其他不适配的怎么办呢? 当然是手搓了。

前期准备

1   在本次移植前,你必须要有在RT-Thread studio中你屏幕的显示和触摸驱动。
 这个简单拉,直接把正点原子的代码移植一下就好拉。

2.你最好还是先在裸机上移植一次,这个可以跟着正点原子litleVGL(LVGL旧版本名称 要
用 这个搜索视频才能搜索的到)视频教程移植一次,这样你移植就会块很多,但是不弄也行。

捞的话就不说了,开始

在移植好屏幕驱动的的工程中,添加LVGL包
在这里插入图片描述

编译一下(会把软件包添加进来) ,这里编译肯定是有错误的,因为我们还有几个文件没有添加进去。添加文件,首先我们是要有这些文件。

找到我们studio安装目录下 ,添加包工程下的下面4个文件
在这里插入图片描述

直接复制这4个文件,在studio中,选择applications 粘贴,顺便把名字改一下,必须改这样LVGL才能调用。把每个文件后面的_template去掉,

在这里插入图片描述
在这里插入图片描述
1.点开 lv_port_disp.c 修改 ,修改这三处
在这里插入图片描述
接下来的三个也修改一下看图。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
大家,体谅一下哈,没写几次博客,可能有些啰嗦,有些地方没表达清楚

接下来就是把我们自己的打点函数和LVGL对接拉

在这里插入图片描述
找到下面的函数,具体修改看我下面的注释
在这里插入图片描述

如果没错的话,你现在编译是不会出错了的。但是别急,还有些东西没弄
现在我们移植触摸接口,

在这里插入图片描述

由于我们只使用到触摸功能,LVGL还有一些按键功能什么鬼的,但是我们不用所以我们要修改

在这里插入图片描述

还有哈,还有哈。是有点麻烦,

我们需要添加一个 lv_conf.h 头文件,本来我们是直接要和前面一样使用他的工程模板的,但是那个改起来太麻烦了,所有我们就抄的别的工程的

在这里插入图片描述

//添加一个头文件名字别错了, 把这些复制进去

#ifndef LV_CONF_H
#define LV_CONF_H

#define LV_COLOR_16_SWAP 0
#define LV_COLOR_DEPTH 16
#define LV_USE_PERF_MONITOR 1

#include <rtconfig.h>
#define LV_HOR_RES_MAX          480    //你屏幕的高
#define LV_VER_RES_MAX          800    //你屏幕的宽

//我们要使能的demo 假如你要使能其他的可以去,packages文件夹下找到
//lv_conf_template.h 下找到对应的宏复制过来哈,就不详述拉

#define LV_USE_DEMO_RTT_MUSIC       1  
#define LV_DEMO_RTT_MUSIC_AUTO_PLAY 1

#define LV_FONT_MONTSERRAT_12       1
#define LV_FONT_MONTSERRAT_16       1

#endif

==我们知道,操作系统中运行需要一个一个线程,LVGL好像也有一个任务调度的所以我们添加一个 lv_demo.c ==
在这里插入图片描述

//复制进去哈,假如你自己写的话,最好也看看这个模板,有些地方要注意
#include <rtthread.h>
#include <lvgl.h>
#include <lv_port_indev.h>
#define DBG_TAG    "LVGL.demo"
#define DBG_LVL    DBG_INFO
#include <rtdbg.h>
#include "MyApplication.h"

#ifndef LV_THREAD_STACK_SIZE
#define LV_THREAD_STACK_SIZE 4096
#endif

#ifndef LV_THREAD_PRIO
#define LV_THREAD_PRIO (RT_THREAD_PRIORITY_MAX*2/3)
#endif

static lv_obj_t * label;

static void slider_event_cb(lv_event_t * e)
{
    lv_obj_t * slider = lv_event_get_target(e);

    /*Refresh the text*/
    lv_label_set_text_fmt(label, "%"LV_PRId32, lv_slider_get_value(slider));
    lv_obj_align_to(label, slider, LV_ALIGN_OUT_TOP_MID, 0, -15);    /*Align top of the slider*/
}

/**
 * Create a slider and write its value on a label.
 */
void lv_example_get_started_3(void)
{
    /*Create a slider in the center of the display*/
    lv_obj_t * slider = lv_slider_create(lv_scr_act());
    lv_obj_set_width(slider, 200);                          /*Set the width*/
    lv_obj_center(slider);                                  /*Align to the center of the parent (screen)*/
    lv_obj_add_event_cb(slider, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL);     /*Assign an event function*/

    /*Create a label below the slider*/
    label = lv_label_create(lv_scr_act());
    lv_label_set_text(label, "0");
    lv_obj_align_to(label, slider, LV_ALIGN_OUT_TOP_MID, 0, -15);    /*Align top of the slider*/
}


static void lvgl_thread(void *parameter)
{
    lv_example_get_started_3();

    while(1)
    {

        lv_task_handler();  //必须要哈  LVGL任务调度
        
        rt_thread_mdelay(5);
    }
}

static int lvgl_demo_init(void)
{

       MX_GPIO_Init();
       MX_FSMC_Init();     
       LCD_Init();         //LCD初始化
       tp_dev.init();      //触摸屏初始化
       
       lv_init();         //LVGL 初始化


    rt_thread_t tid;
    tid = rt_thread_create("LVGL", lvgl_thread, RT_NULL, LV_THREAD_STACK_SIZE, LV_THREAD_PRIO, 0);
    if(tid == RT_NULL)
    {
        LOG_E("Fail to create 'LVGL' thread");
    }
    rt_thread_startup(tid);

    return 0;
}


INIT_APP_EXPORT(lvgl_demo_init);

最后,编译------报错 --吐了。
这个好像是LVGL和cubemx冲突了,找到cubemx把
void Error_Handler(void); 注释掉

在这里插入图片描述
编译-------下载,屏幕中出现一个可以滑动的进度条
恭喜你------

在这里插入图片描述

移植了一个星期,把所有踩过的坑都分享给大家,最后祝大家头发早日掉光!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用RT-Thread studio 把LVGL移植到RT-Thread 上 的相关文章

  • vue crypto-js加解密

    1 安装crypto js npm install crypto js save 2 编写encrypt js const CryptoJS require crypto js import md5 from js md5 var key
  • 关于程序员【锁死】服务器

    干程序员这么多年 头一次听说 锁死 服务器这么个名词 乍一听到被媒体造的这个名词 觉着很突兀 自己念两遍就会感到头疼 恶心 想吐这么膈应 服务器到底是怎么 锁死 的 什么玩意 你看看人家 数据库系统概论 里面人家关于 锁 的一个翻译 死锁

随机推荐

  • ARM单片机通用IAP在线升级YMODEM协议

    ARM单片机通用IAP在线升级YMODEM协议 效果 YMODEM协议格式 移植修改接口 测试代码 代码获取 效果 YMODEM协议格式 接收开始流程 接收者1HZ发送接收状态 C C 代表字符 C 进入接收状态 发送者发送起始帧 SOH
  • 目标检测学习笔记+附入门资料+表面缺陷检测

    待更新补充 文章目录 放在最前 MARK入门阅读学习资料 一 目标检测基本概念 1 名词含义 目标检测 目标检测方法的分类 Bounding box 滑动窗口 R CNN步骤详解 交并比Interest over Union IoU 平均精
  • 对全连接层(fully connected layer)的通俗理解

    原文地址 https blog csdn net qq 39521554 article details 81385159 定义 全连接层 fully connected layers FC 在整个卷积神经网络中起到 分类器 的作用 如果说
  • matplotlib绘图

    孤影常伴灯 你在夜里写字 我在昏黄中布景 风吹皱那烟波浩渺的迷离 也想吹散关于你的记忆 你在红尘打坐 我在紫陌修佛 万般皆因果 何须嗔叹 闲来无事 索然无趣 忽而兴起 画几个简单的数据分析图 一 将数据生成柱状图 代码 coding utf
  • 【计算机网络】TCP/IP网络模型里这些问题你会吗

    零 为什么需要有TCP IP网络模型 不同设备的进程之间相互通信 需要网络通信 而设备存在多样性 需要兼容各种设备 从而协商出一套通用的网络协议 并且这个网络协议是分层的 每层都有各自的作用和职责 一 最上层是哪层 应用层 1 该层有哪些协
  • SQL 经典面试题:统计最近七天连续三天活跃的用户

    1 需求 给定 mid dt 的用户登录记录表 查找最近 7 天内连续 3 天活跃的用户 id 2 数据表 tmp table tmp login test CREATE TABLE tmp table tmp login test mid
  • 5G UE测量

    目录 系列文章目录 一 为何干测量 二 测量干了啥 三 何时干测量 四 用啥干测量 五 怎么干测量 如 以上就是今天要讲的内容 本文仅仅简单从缘由 结果 时机 原料 过程五个方面概述了5G UE测量大至的来龙去脉 一 为何测量 移动 性管理
  • 【hello Linux】进程信号

    目录 1 进程信号的引出及整体概况 2 信号的产生 1 键盘产生 2 进程异常 3 系统调用 4 软件条件 3 信号的保存 1 信号相关的常见概念 2 sigset t 3 信号集操作函数 4 sigprocmask 对block位图的操作
  • 5.4双积分ADC工作原理

    文章目录 1 高中几个知识点 exp n log n lgx lnx 电容充放电公式 2 双积分型ADC工作原理 3 SAR和 型模数转换器 ADC 1 高中几个知识点 exp n exp函数即指数函数 e的n次方的函数 自然常数e 2 7
  • Java 异常创建及控制

    最近在重新拾起Java 想开始分享一些自己的表达 就从这里开始了 Java中有一个Throwable类 它是所有异常或者说是违例的基础 包括了两种类型的异常 一种叫Error 表示的是编译器和系统错误 我们通常不需要去在意它们 另一种叫Ex
  • 国产版ChatGPT大盘点

    我们看到 最近 国内大厂开始密集发布类ChatGPT产品 一方面 是因为这是最近10年最大的趋势和机会 另一方面 国内的AI 不能别国外卡了脖子 那在类ChatGPT赛道上 哪些中国版的ChatGPT能快速顶上 都各有哪些困境需要突破呢 本
  • 第七周作业1

    1 调试分析课本每一个例题 有可能的话更改成2 3个方法的新程序 2 编程实现课本每一个编程习题 例5 1 include
  • LSM-Tree

    LSM Tree的设计思路是 将数据拆分为几百M大小的Segments 并是顺序写入 它的核心思路其实非常简单 就是假定内存足够大 因此不需要每次有数据更新就必须将数据写入到磁盘中 而可以先将最新的数据驻留在内存中 等到积累到最后多之后 再
  • 递归与迭代

    迭代 迭代 迭代简单来讲就是循环 类比于我们循环输出某一个字符数组时的情景 从字符数组中不断取出字符 再将字符输出 迭代的循环过程则是从栈 或者队列 中不断取出要操作的元素 进行操作 与普通循环过程不同的是在不断取出元素的同时也会向栈中放入
  • Java8中Collectors的使用

    前言 基本类型的流没有这个用法 文章目录 averagingDouble averagingInt averagingLong collectingAndThen counting groupingBy groupingByConcurre
  • IRQ和FIQ中断的区别

    FIQ和IRQ是两种不同类型的中断 ARM为了支持这两种不同的中断 提供了对应的叫做FIQ和IRQ处理器模式 ARM有7种处理模式 一般的中断控制器里我们可以配置与控制器相连的某个中断输入是FIQ还是IRQ 所以一个中断是可以指定为FIQ或
  • Mac下如何降级Java、卸载Java

    前言 安装一些组件或插件时 有时会提示错误 What went wrong Could not determine java version from 11 查看组件或插件对应的Java版本会发现 可能只支持 Java 8 但本地安装的Ja
  • 《网络安全》零基础教程-适合小白科普

    网络安全 零基础教程 目录 目录 网络安全 零基础教程 第1章 网络安全基础 什么是网络安全 常见的网络安全威胁 网络安全的三个基本要素 网络安全的保障措施 第2章 网络攻击类型 病毒 蠕虫 木马 后门 DoS DDoS攻击 SQL注入 X
  • Java入门项目——读书管理系统

    Java简单实现读书管理系统 一 前言 二 思路及整体框架 三 代码展示 1 有关读书包 Book 2 有关用户包 3 有关操作书的包 一 前言 相信有很多小伙伴学习完了 JavaSE 基础语法 想知道自己到底学的怎么样 或则学完不知道这么
  • 使用RT-Thread studio 把LVGL移植到RT-Thread 上

    使用RT Thread studio 移植 LVGL到RT Thread中 其实RT Thread 移植LVGL 官方已经出来很多教程 但是但是他出的教程都是基于一些他们适配的BSP 但是其他不适配的怎么办呢 当然是手搓了 前期准备 1 在