• 基于CUBEMX的STM32F4 Hal库,配置LVGL(无操作系统版)


    本篇文章移植思路适用于所有嵌入式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 */
    }
    
    
    目前就写到这里吧,后面再遇到什么问题再补充。
  • 相关阅读:
    Gamframwork 检查更新、开始更新 热更的流程
    OC高仿iOS网易云音乐AFNetworking+SDWebImage+MJRefresh+MVC+MVVM
    MySQL表数据导入导出
    Redis快速入门
    记一次 .NET某收银软件 非托管泄露分析
    leetcode - 2707. Extra Characters in a String
    acunetix wvs网站漏洞扫描 XSS CSOR处理
    Cheat Engine CE v7.5 安装教程(专注于游戏的修改器)
    unity搭建xlua和emmy_lua的debug环境
    这是一棵适合搜索二叉树
  • 原文地址:https://www.cnblogs.com/buglee/p/17616434.html