首页 > 其他分享 >基于CUBEMX的STM32F4 Hal库,配置LVGL(无操作系统版)

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

时间:2023-08-09 13:33:25浏览次数:51  
标签:文件 CODE Hal label lv USER CUBEMX STM32F4 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 */
}

目前就写到这里吧,后面再遇到什么问题再补充。

标签:文件,CODE,Hal,label,lv,USER,CUBEMX,STM32F4,LVGL
From: https://www.cnblogs.com/buglee/p/17616434.html

相关文章

  • UART异步通信配置步骤/HAL
    1串口工作参数MX_USART2_UART_Init2底层初始化HAL_UART_MspInit3开启串口异步接收中断HAL_UART_Receive_IT4设置优先级,使能中断HAL_NVIC_SetPriority / HAL_NVIC_SetPriority5编写中断服务函数USART2_IRQHandler/HAL_UART_IRQHandler/HAL_UART_R......
  • 2023 LS-PC Programming Challenge TFT
    2023LS-PCProgrammingChallengeTFT2344ASCIIArea-PCOIOnlineJudge(pcoij8.ddns.net)题目大意求一个封闭区域的面积做法我们考虑一行一行看,第一次遇到斜线时标记一下,接下来每一个点都加入答案,等到下一次遇到斜线时为止,再额外加上一代码#include<bits/stdc++.h>u......
  • DataWhale NLP第二期 第一次打卡
    理解赛题,跑通竞赛实践全流程跑通实践基线Baseline,获得自己的成绩提交任务一打卡,查看个人成绩排行榜赛题理解赛题链接本赛题要求构建一个文本分类器,来区分真实对话和由AI产生的对话,训练的数据包括一系列真实对话和ChatGPT生成的对话样本,参赛选手需要设计并训练一个模型,使其......
  • HAL库回调机制
    初始化回调HAL_PPP_Init()  调用↓HAL_PPP_MspInit()配置外设HAL中断回调中断信号 中断服务函数PPP_IRQHandler()中断处理公用函数HAL_PPP_IRQHandler()中断处理回调函数__weakvoidHAL_PPP_xxxCallback()......
  • 20230805 Datawhale第一次直播笔记
    机器学习上分技巧内容解析subtask是并列的,并且取最优,那么只需要针对最优进行优化转化为回归问题是否会更加准确数据分析和特征工程是非常关键的部分数据探索性分析(EDA):数据集大小,字段类型缺失值情况特征是否冗余是否存在时间信息标签的分布训练集测试集的分布单变量/......
  • Datawhale数据分析教程来了!
     Datawhale开源 贡献者:陈安东、金娟娟、杨佳达、老表开源初心当我入门数据分析时,用的是鼎鼎大名的《pythonfordataanalysis》,书中对技术操作讲解细致,但遗憾的是,对于数据分析的逻辑介绍就少了很多。我和很多学习者会觉得敲了一堆代码却并不知道有什么用。毕竟理论学习和生活中......
  • phalcon总是跳到index/index问题 nginx try_files配置
    配置好测试系统后,无论怎么设置网站系统的路由(Router)系统,都不能引起分配器(dispatcher)的调用,总是调用默认的IndexController和indexAction。仔细检查了下代码,没问题。然后又拿出老办法–追踪源代码。找到对应的源代码分配器部分,看了看,也没啥可疑的错误。问题出在Nginx的配置......
  • Undefined symbol HAL_SRAM_Init (referred from lcd.o) 报错无法使用HAL_SRAM_Init
    前言最近在使用HAL库配置FSMC的时候,发现在使用CubeMX生成的fsmc的配置文件,编译不会报错:UndefinedsymbolHAL_SRAM_Init(referredfromlcd.o)而自己移除CubeMX生成的配置文件,一步步自己配置,就会出现上诉报错,并且将stm32f4xx_hal_sram.h文件包括进去后,仍然报错,奇怪的是MDK编......
  • Golang 使用 JSON unmarshal 数字到 interface{} 数字变成 float64 类型
    最近在golang业务开发时,遇到一个坑。我们有个服务,会接收通用的interface对象,然后去给用户发消息。因此会涉及到把各个业务方传递过来的字符串,转成interface对象。但是因为我的字符串里有一个数字,比如下面demo里的{"number":1234567},而且数字是7位数,在经过json.Unmarshal后,被转成......
  • halo博客从1.X迁移到2.X注意事项
    前言官方的迁移教程很详细:https://docs.halo.run/getting-started/migrate-from-1.x但是从我看官方文档到完成数据迁移,途中也吃了不少亏(昨天弄到半夜),所以写出这篇文档,避免更多的人踩坑本教程只针对于halo1.5/1.6Sakura主题迁移到halo2.8的踩坑记录,也许其他主题并不一样。且随......