本篇文章移植思路适用于所有嵌入式MCU,包括Arm,STM32,NXP,乐鑫,Nuvoton,Arduino,RT-Thread,Zephyr,NuttX,Adafruit等等。

为什么要写这一篇移植教程?

也许你会说各种开源论坛上面上,已经有很多移植教程了,为什么还要再重新写一篇?

因为很简单我按照前辈们的思路和移植步骤,到最后没有一个成功的,这就不得不得需要再重新研究下官网的移植教程了> https://docs.lvgl.io/master/porting/project.html

按照官网的移植教程,我顺利的将最新版的LVGL移植到STM32F4主控板上并且点亮显示屏

后面会不会更新?

由于项目的需要,后续会慢慢的加入操作系统(FreeRTOS),SD卡读取,内存管理,实体键盘等外设或功能。

现在开始移植吧!(LVGL——Vser 8.3)

Step.1LVGL官网下载

1.下载路径①

https://github.com/lvgl/lvgl

通过git clone或者直接下载都行

下载完文件内容是这样的



Tips:文件里面的内容在这一篇文章,不作分析,本篇文章只对移植是否成功进行探究。

Step.2LVGL文件裁剪

需要裁剪的有4个文件,分别是2个文件夹和2个单独文件,如下图所示

Step.3LVGL文件复制

将裁剪出来的文件,复制并且粘贴到自己的工程目录下,至于你想粘贴到哪里随你的便,我不关心,只需要在往MDK中添加时,能够找到相应的路径就行。

Step.4MDK文件分组与.c添加

1.1 创建的分组应该为这样



里面的conf.h文件是我自己方便配置的时候找到文件,故意添加到分组里面的,我的意思:你可以不添加,随你的便。

1.2 往分组里面添加.c文件

再添加前需要将这个文件重新命名下:(就是将名称里template删除)

将..\lvgl\src文件夹下面的所有.c文件添加LVGL_Core分组里面

特别注意是:所有!!!

将..\lvgl\examples\porting文件夹的文件按需添加到LVGL_Port里面

各接口代码含义:

lv_port_disp_template -------显示屏接口代码

lv_port_fs_template --------文件管理接口代码

lv_port_indev_template-------输入接口代码

Step.5MDK头文件添加

添加后,如下图所示

Step.6MDK中修改已经移植好的LVGL文件

1修改lv_port_disp_template.h文件



第7行改为#if 0 改为#if 1

第22行改为#include "lvgl.h"

2修改lv_port_disp_template.c文件



第7行改为#if 0 改为#if 1

第13行改为添加LCD显示屏驱动文件

屏蔽下图部分

disp_flush修改画点函数



将disp_flush函数中,源代码屏蔽或者删除掉,添加自己的显示屏填充函数。

Step.7MDK移植LVGL可能出现的问题

1.空间不够

解决方法将lvgl_conf.h文件中 #define LV_MEM_SIZE (32 * 1024U) /*[bytes]*/ 数值适当缩小,官方默认是512*1024U也就是512k,数值太大你的小小单片机肯定空间不够!

/*************************************************************************************************************************/

至此移植工作已经全部结束,编译,如果再有问题,必须解决后才能往下操作!

Step.8让LVGL跑起来吧!

点击查看代码
void lv_ex_label(void)
{
char* github_addr = "lvgl_test";
lv_obj_t * label = lv_label_create(lv_scr_act());
lv_label_set_recolor(label, true);
lv_label_set_long_mode(label, LV_LABEL_LONG_SCROLL_CIRCULAR); /*Circular scroll*/
lv_obj_set_width(label, 120);
lv_label_set_text_fmt(label, "test", github_addr);
lv_obj_align(label, LV_ALIGN_CENTER, 0, 10); lv_obj_t * label2 = lv_label_create(lv_scr_act());
lv_label_set_recolor(label2, true);
lv_label_set_long_mode(label2, LV_LABEL_LONG_SCROLL_CIRCULAR); /*Circular scroll*/
lv_obj_set_width(label2, 120);
lv_label_set_text_fmt(label2, "123");
lv_obj_align(label2, LV_ALIGN_CENTER, 0, -10);
} /* USER CODE END 0 */ /**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */
SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
LCD_Init();
lv_init();
lv_port_disp_init(); system_init();
lv_ex_label();
/* USER CODE END 2 */ /* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
// LCD_Fill(0,0,480,320,RED);
lv_task_handler();
HAL_Delay(10); /* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
目前就写到这里吧,后面再遇到什么问题再补充。

基于CUBEMX的STM32F4 Hal库,配置LVGL(无操作系统版)的更多相关文章

  1. STM32F4 HAL库中是如何实现UART IO配置的?

    1.配置串口IO.中断等底层的东西需要在用户文件中重写HAL_UART_MspInit函数2.hal库是在stm32f4xx_hal_msp.c文件中重写的HAL_UART_MspInit函数,分析如 ...

  2. 新建基于STM32F103ZET6的工程-HAL库版本

    1.STM32F103ZET6简介 STM32F103ZET6的FLASH容量为512K,64K的SRAM.按照STM32芯片的容量产品划分,STM32F103ZET6属于大容量的芯片. 2.下载HA ...

  3. 基于react hooks,zarm组件库配置开发h5表单页面

    最近使用React Hooks结合zarm组件库,基于js对象配置方式开发了大量的h5表单页面.大家都知道h5表单功能无非就是表单数据的收集,验证,提交,回显编辑,通常排列方式也是自上向下一行一列的方 ...

  4. 【GMT43智能液晶模块】基于HAL库的SDRAM和LCD驱动例程(MDK工程&CubeMX工程)

    说明: 1.该工程基于HAL库实现动态存储器SDRAM驱动以及液晶控制器LCD驱动. 2.工程通过STM32CubeMX(Version 4.22.0)配置生成,可直接打开进行配置. 3.KEIL M ...

  5. STM32F407 使用HAL库延时微妙实现方法(附CubeMX配置过程)

    STM32F407 使用HAL库延时微妙实现方法(STM32CubeMX配置) 作者 : 李剀出处 : https://www.cnblogs.com/kevin-nancy/p/10696681.h ...

  6. STM32F072从零配置工程-基于HAL库的串口UART中断配置

    先上一个采用串口直接传输的Demo: 此处的思路是完全采用HAL库来实现的,核心是运用HAL_UART_Transmit_IT和HAL_UART_Receive_IT两个函数来实现的,可以作为一个De ...

  7. HAL库|神器cubemx的正确打开方式

    前言 工欲善其事,必先利其器.HAL库的开发不一定必须使用cubemx,但是使用了cubemx,你绝对不会后悔.基于一些小伙伴对cubemx的使用还有一些疑问,本次小飞哥从新建工程到生成工程,编写应用 ...

  8. HAL库与Cubemx系列|Systick-系统滴答定时器详解

    Systick是什么? 关于Systick,在Context-M3权威指南中如此描述: SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号: 15).在以前,大多操作系统需要一 ...

  9. 【书籍连载】《STM32 HAL 库开发实战指南—基于F7》-第一章

    从今天起,每天开始连载一章<STM32 HAL 库开发实战指南—基于F7>.欢迎各位阅读.点评.学习. 第1章  如何使用本书 1.1  本书的参考资料 本书参考资料为:<STM32 ...

  10. stm32F4中断分析-HAL库

    详细可以参考: STM32使用HAL库操作外部中断——实战操作 https://www.cnblogs.com/wt88/p/9624103.html /** ******************** ...

随机推荐

  1. 2020-08-18:介绍下MR过程?

    福哥答案2020-08-18:[来自[MapReduce执行过程及运行原理详解] 答案](https://www.panziye.com/bigdata/625.html)MapReduce执行的4个 ...

  2. 2020-09-18:LRU手撸,说下时间复杂度和空间复杂度。

    福哥答案2020-09-18: 方法:哈希表 + 双向链表.时间复杂度:对于 put 和 get 都是 O(1).空间复杂度:O(capacity),因为哈希表和双向链表最多存储 capacity+1 ...

  3. 浅谈如何使用 github.com/yuin/gopher-lua

    最近熟悉 go 项目时,发现项目中有用到 github.com/yuin/gopher-lua这个包,之前并没有接触过,特意去看了官方文档和找了些网上的资料,特此记录下. 本次介绍计划分为两篇文章,这 ...

  4. springboot 整合druid和mybatis

    Shrio+Mybatis+Druid 1.导入相关依赖包 2.在配置文件配置数据源 3.pojo对应实体类和mapper目录下的接口UserMapper (3.使用注解版) package com. ...

  5. vue/cli3整合Cesium,加载离线arcgis 切片

    最開始使用webpack進行cesium 集成, 出现了问题一大堆,最后只好选择传统的方法直接引入了,具体操作如下 目录 一.安装cesium 二.使用script引用cesium 1.切换到 nod ...

  6. Factory Method Pattern 工厂方法模式简介与 C# 示例【创建型】【设计模式来了】

    〇.简介 1.什么是工厂方法模式? 一句话解释:   实体类和工厂类均为单独实现,不影响已实现的类,方便扩展. 工厂方法模式(Factory Method Pattern)是一种创建型模式,它允许客户 ...

  7. Spectre.Console-实现自己的CLI

    引言 最近发现自己喜欢用的 Todo 软件总是差点意思,毕竟每个人的习惯和工作流不太一样,我就想着自己写一个小的Todo 项目,核心的功能是自动记录 Todo 执行过程中消耗的时间(尤其面向程序员), ...

  8. 图解VirtualBox安装CentOS 7

    VirtualBox简介 VirtualBox是由德国InnoTek软件公司出品的虚拟机软件,现在则由甲骨文公司进行开发,是甲骨文公司xVM虚拟化平台技术的一部分. VirtualBox提供用户在32 ...

  9. 00.Webstrom的基本入门设置

    1.取消红框类自动打开项目 2.打开轮滚缩放代码 3.设置代码字体,这里选择的是Consolas 推荐免费字体:https://files.cnblogs.com/files/huadaxia/jet ...

  10. JavaWeb技术栈图(web服务器+web容器是何物)

    JavaWeb技术栈图(web服务器+web容器是何物) 两个重要概念web服务器+web容器 什么是Web服务器? Tomcat 服务器就是一个免费的开放源代码的 Web 应用服务器 web服务实际 ...