在MDK中自动部署LVGL,在stm32f407ZGT6移植LVGL-8.4,运行demo,显示label

article/2025/8/17 11:24:12

在MDK中自动部署LVGL,在stm32f407ZGT6移植LVGL-8.4

  • 一、硬件平台
  • 二、实现功能
  • 三、移植步骤
    • 1、下载LVGL-8.4
    • 2、MDK中安装LVGL-8.4
    • 3、配置RTE
    • 4、配置头文件 lv_conf_cmsis.h
    • 5、配置lv_port_disp_template
  • 四、添加心跳相关文件
    • 1、在STM32CubeMX中配置TIM7的参数
    • 2、使能中断,中断优先级尽可能高
    • 3、编写中断回调函数
    • 4、在main函数中调用配置、初始化和使能中断的HAL库函数
  • 五、修改main函数
    • 1、对LVGL进行初始化
    • 2、在while中,增加lv_task_handler函数。
    • 3、运行lv_demo_benchmark
  • 六、配置MDK编译选项
    • 1、修改堆栈大小
    • 2、增加预编译宏
    • 3、注意:移植 LVGL 必须开启 C99 模式
  • 七、在LVGL中显示字符串
    • 1、修改lv_conf_cmsis.h
    • 2、增加预编译宏
    • 3、修改main函数
    • 4、while中的lv_task_handler函数,在心跳的控制下处理事务
  • 几点说明

一、硬件平台

核心板:正点原子 探索者 STM32F407ZGT6
4’3寸电容触摸屏

二、实现功能

1、运行lv_demo_benchmark.c这个demo实例;
2、在屏幕上显示字符串。

三、移植步骤

1、下载LVGL-8.4

下载的渠道很多:

  1. 微信公众号:裸机思维
    这里有两个版本的 cmsis-pack:
  • v8.4.0 : 官方的维护性更新,这是目前最稳定也最推荐的版本。
  • v9.2.1: LVGL9 的稳定性更新。加入对ST-DMA2D的支持,加入对Ne maGFX的支持。加入新Demo eBike。
  1. gitee
    lvgl/lvgl - Gitee.com

2、MDK中安装LVGL-8.4

直接通过MDK的Pack-Installer进行直接安装。
下载解压之后,得到pack包:
在这里插入图片描述
然后在Pack Installer中安装即可。
在这里插入图片描述
安装成功,可以在RTE中看到安装的LVGL。
在这里插入图片描述
为了确保工程文件的完整性,把C:\Keil_v5\ARM\PACK\LVGL\lvgl\8.4.0目录下的demo、examples、src、lvgl.h复制到自己的工程目录…\MDK-ARM\RTE\LVGL中。
在这里插入图片描述
在这里插入图片描述

3、配置RTE

在MDK中通过菜单 Project->Manage->Run-Time Enviroment 打开RTE配置窗口,找到LVGL将其展开,勾选benchmark、Essential、Extra Themes和porting。
单击“OK”,可以看到LVGL已经自动加入到工程列表中。
在这里插入图片描述

4、配置头文件 lv_conf_cmsis.h

是对lvgl组件进行配置,包括屏幕尺寸、颜色深度、RGB565模式等。具体请参考LVGL配置与移植指南-CSDN博客 。
重要的是:将开头处 #if 0 修改为 #if 1,使整个头文件生效。
可以根据实际情况,修改其他参数,例如把所需内存改小一些:

#define LV_MEM_SIZE (16U * 1024U)          /*[bytes]*/

5、配置lv_port_disp_template

  1. 打开 lv_port_disp_template.h,将开头处#if 0修改为 #if 1,使整个头文件生效。
  2. 包含lcd.h
#include lcd.h
  1. 打开 lv_port_disp_template.c,将开头处#if 0修改为 #if 1,使整个头文件生效。
  2. 修改屏幕分辨率
    #define MY_DISP_HOR_RES    480#define MY_DISP_VER_RES    800
  1. 选择定义缓冲区的方式。LVGL提供了三种缓冲的方式:第一种只有一个缓冲区;第二种有2个缓冲区,用于DMA;第三种是2个全缓冲区。本次选择第一种,把其他2种定义缓冲区的代码删除或者注释掉。否则,可能在编译时出现容量不足的错误。
  2. 修改disp_init函数,增加LCD驱动中的初始化代码。
static void disp_init(void)
{/*You code here*/lcd_init();
}
  1. 修改disp_flush函数,增加正点原子的填充函数。
static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
{lcd_color_fill(area->x1, area->y1, area->x2, area->y2, (uint16_t *)color_p);/*IMPORTANT!!!*Inform the graphics library that you are ready with the flushing*/lv_disp_flush_ready(disp_drv);
}
  1. 在RTE_Components.h文件中,定义宏:
    #define LV_LVGL_H_INCLUDE_SIMPLE

四、添加心跳相关文件

LVGL的 30ms 心跳 通过调用定时器7的中断来实现。

1、在STM32CubeMX中配置TIM7的参数

预分频8400-1,时钟计数300-1,那么30ms产生一次更新中断。
在这里插入图片描述

2、使能中断,中断优先级尽可能高

在这里插入图片描述
配置完成之后,自动生成TIM7的配置和初始化代码。

3、编写中断回调函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM6) {//HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_10);  // LED1翻转 }else if(htim->Instance == TIM7) {lv_tick_inc(30);  // 关键!通知LVGL时间流逝30ms }
}

4、在main函数中调用配置、初始化和使能中断的HAL库函数

  MX_TIM7_Init();HAL_TIM_Base_Start_IT(&htim7);// 启动TIM7中断

五、修改main函数

1、对LVGL进行初始化

  1. 增加包含头文件
#include "RTE_Components.h"
#include "lv_port_disp_template.h"
  1. 在main函数中增加初始化函数
	lv_init();			  // lvgl系统初始化lv_port_disp_init();  // lvgl显示接口初始化,放在lv_init()的后面

2、在while中,增加lv_task_handler函数。

在 LVGL 中,lv_task_handler() 是 核心任务处理函数,负责执行 LVGL 的内部任务调度(如界面刷新、动画处理、输入设备事件处理等)。

  while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */delay_ms(1000);lv_task_handler(); // lvgl的事务处理}

3、运行lv_demo_benchmark

  1. 在main函数中增加头文件
#include "lv_demo_benchmark.h"
  1. 在“魔术棒”->“C/C++”->“Define”中,添加LV_USE_DEMO_BENCHMARK

在这里插入图片描述

  1. 调用lv_demo_benchmark函数
	lv_init();			  // lvgl系统初始化lv_port_disp_init();  // lvgl显示接口初始化,放在lv_init()的后面lv_demo_benchmark();

六、配置MDK编译选项

1、修改堆栈大小

注意的是:要跑这个Demo,Stack(栈)和 Heap(堆)各自都不能小于 4K,切记,切记!
在STM32CubeMX中修改
在这里插入图片描述

2、增加预编译宏

在“魔术棒”->“C/C++”->“Define”中,添加LV_CONF_SKIPLV_LVGL_H_INCLUDE_SIMPLE
在这里插入图片描述

3、注意:移植 LVGL 必须开启 C99 模式

在这里插入图片描述

七、在LVGL中显示字符串

利用LVGL的Labe标签显示字符串。参考资料:
LVGL lv_label标签控件

1、修改lv_conf_cmsis.h

在\RTE\LVGL\lv_conf_cmsis.h文件中,修改成

 #define LV_FONT_MONTSERRAT_32 1

2、增加预编译宏

在“魔术棒”->“C/C++”->“Define”中,添加LV_FONT_MONTSERRAT_32
在这里插入图片描述

3、修改main函数

	lv_init();			  // lvgl系统初始化lv_port_disp_init();  // lvgl显示接口初始化,放在lv_init()的后面lv_demo_benchmark();lv_obj_t * label = lv_label_create(lv_scr_act()); // 在活动屏幕上创建标签 lv_label_set_text(label, "Hello LVGL!");          // 设置文本 lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);       // 居中显示 lv_obj_set_style_text_font(label, &lv_font_montserrat_32, LV_PART_MAIN);
  • lv_label_create(lv_scr_act())
    创建一个标签对象,并绑定到当前活动屏幕(lv_scr_act() 返回默认屏幕)。
    lv_obj_t* 是 LVGL 中所有控件的基类(类似面向对象中的父类)。

  • lv_label_set_text()
    设置标签的文本内容(支持动态更新,如显示传感器数据)。

  • lv_obj_align()
    将标签对齐到屏幕中心(LV_ALIGN_CENTER),后两个参数是偏移量(这里为 0)。

  • lv_obj_set_style_text_font()
    设置字体为 lv_font_montserrat_32(32 像素高的 Montserrat 字体)。

4、while中的lv_task_handler函数,在心跳的控制下处理事务

编译下载运行结果如下:
在这里插入图片描述

几点说明

  1. 在移植LVGL之前,已经完成了正点原子的TFTLCD代码移植.本人使用STM32CubeMX自动生成初始化和配置代码,所以在移植正点原子的代码时,没有移植他的system、sys和usart.
  2. 在移植的过程中,主要出现的错误是包含头文件、delay_ms、delay_us的错误,本人用TIM6实现delay_us;重新定义delay_ms函数调用HAL_Delay实现ms延时.

http://www.hkcw.cn/article/DVlUgHRHsK.shtml

相关文章

9.Gateway新一代网关

目录 一、Gateway概述 二、Gateway三大核心 三、Gateway工作流程 入门配置 建Module 改POM 写YML 主启动 业务类 测试 四、9527网关进行路由映射 1.编写支付正常业务逻辑 2.9527网关YML新增配置 3.测试1 4.测试2 启动订单微服务测试,看看是否通过网…

雷军刚学的莫言名言不是莫言说的 小米华为汽车大乱斗

#雷军疑似回应余承东#喷了,雷军把自己的微博编辑了,去掉「刚学会一句莫言名言:诋毁,本身就是一种仰望」这句心灵鸡汤了。这波小米华为汽车大乱斗,整的乐子有点大啊,感谢今天儿童节贡献的欢乐[doge]“莫言说:诋毁,本身就是一种仰望。”小米卢伟冰在社交媒体上的这句话,…

广东本月起在8市启动住院免陪护试点 缓解家庭陪护压力

俗话说“久病床前无孝子”,这句话道出了很多家庭面对病人陪护时的无奈与压力。特别是随着老龄化问题日益严重,独生子女家庭在父母住院时面临的陪护难题更加突出。如果医院能够提供标准化的照护服务,将大大缓解这一困境。国家卫健委等三部委已印发方案,将在6月全国范围内开展…

AI炼丹日志-22 - MCP 自动操作 Figma+Cursor 自动设计原型

MCP 基本介绍 官方地址: https://modelcontextprotocol.io/introduction “MCP 是一种开放协议,旨在标准化应用程序向大型语言模型(LLM)提供上下文的方式。可以把 MCP 想象成 AI 应用程序的 USB-C 接口。就像 USB-C 提供了一种…

数字化赋能风电未来:视频监控+应急管理系统破解边远基站无人值守难题

引言:风电行业的新挑战与数字化机遇 随着我国风电产业的高速发展,越来越多的风电场建在边远山区、荒漠或海上,这些区域环境恶劣、交通不便,传统人工巡检模式成本高、效率低,且存在安全隐患。如何实现风电基站的无人化…

45岁陈冠希咖啡店被偶遇 悠闲生活羡煞旁人

陈冠希和超模秦舒培结婚后,育有一个8岁的女儿。现在他们一家三口定居在日本东京中目黑。陈冠希经常光顾当地的一家咖啡店,多次被民众偶遇。5月31日,陈冠希再次出现在这家咖啡店,并被认出。当天他穿着自家潮牌设计的衣服,看起来很随性,但穿搭并不十分时尚。他的状态还不错…

关之琳62岁状态极佳 港圈传奇女神依旧风采

关之琳近日出席活动状态极佳,疑似与前任马清伟、刘銮雄同场也不尴尬,更与马清伟现任女友大方合影。62岁仍保持完美身材和冻龄美貌,不愧是港圈传奇女神!责任编辑:zx0001

UDOP:统一视觉、文本与版式的信息以实现通用文档处理

摘要 我们提出了通用文档处理(UDOP)模型,一种基础的文档人工智能模型,它将文本、图像和布局模态与多种任务格式统一在一起,包括文档理解和生成。UDOP利用文本内容与文档图像之间的空间关联,通过一种统一的…

新理财手段突然爆火 谷子经济引关注

谷子的授权溢价、金融化泡沫、炒作乱象以及涉黄等法律风险,成为产业升级道路上的现实难题。“一块‘吧唧’(徽章)被炒到7万多”登上热搜后,公众开始对谷子经济有了全新的认知和理解。这款在二手平台上被炒到7.2万元的“吧唧”,是《排球少年!!》里西谷夕的角色。这款徽章…

《全员加速中》苏醒最后一秒被抓 再就业男团欢乐互动

再就业男团再次给观众带来欢乐。《快乐再出发》第三季结束后,他们合体次数不多,但苏醒的分享欲很强,在社交账号上频繁更新与成员们的互动消息,总能逗乐大家。最近,苏醒参加了新一期《全员加速中》的录制。他本想好好表现一番,结果刚一开工就被猎人抓到中止间,体验感直接…

雷军透露小米YU7预计7月量产 全力准备中

6月1日,雷军在微博上宣布,2025年5月小米SU7的交付量将超过28000台。他同时透露,公司正在全力准备小米YU7的大规模量产,预计将在7月份开始。雷军还提到,他刚学会了一句莫言的名言:诋毁,本身就是一种仰望。此前一天,小米集团合伙人、总裁卢伟冰也引用了这句名言。他表示,…

俄罗斯桥梁坍塌 火车脱轨扭成麻花 事故致7死数十伤

俄罗斯西部布良斯克州一座桥梁于5月31日晚发生坍塌,导致一列客运火车脱轨。布良斯克州长博戈马兹表示,该事件已造成至少7人死亡,另有数十人受伤。救援现场的照片显示了事故后的紧急救援情况。责任编辑:zx0001

小米多位高管集体发声 全力准备小米yu7量产

6月1日,雷军发文称,小米正在全力为小米yu7的大规模量产做准备,预计在7月份实现量产。他还引用了莫言的一句话:诋毁,本身就是一种仰望。5月31日,卢伟冰表示,无论是SU7的热销还是YU7获得比SU7更高的关注和期待,都是基于强大的产品力。他强调,小米汽车的成功源于小米的价…

德约科维奇3-0横扫进法网16强 轻松晋级展现实力

北京时间6月1日,法网男单第三轮比赛中,赛会6号种子德约科维奇对阵世界排名153位的米索里奇。德约科维奇全程占据优势,以3-0轻松战胜对手晋级。比赛开始后,德约科维奇率先保发。第二局中,尽管他逼出了三个破发点但未能把握住机会,双方经过多次平分后米索里奇艰难保发。德约…

歼20垂直起降 假照片引发热议

近日,在国内知名军事资讯节目《军武次位面》的评论区,有网友分享了一张据称是“歼-20垂直起降型战机试飞”的照片。许多自媒体和营销号也借此机会大做文章,声称中国的歼-20垂直起降版本已经进行了试飞。这张照片展示了一架歼-20战机的外形,并且可以看到一个类似F-35B垂直起…

日本水产品想恢复入华?中方回应 技术交流取得进展

5月30日,外交部发言人林剑主持例行记者会。有记者提问,据了解,5月28日,中国海关总署同日方就日本水产品安全问题进行了技术交流,希望了解相关情况。林剑表示,今年中方在持续开展对福岛核污染水排海国际监测并独立取样检测结果没有异常的基础上,与日方就日本水产品安全问…

国际奥委会发盛李豪霹雳舞视频 射击冠军跨界热舞

6月1日,奥林匹克运动会发布了一段盛李豪跳霹雳舞的视频。视频中,他表示希望能与巴黎奥运会霹雳舞B-Girls铜牌得主刘清漪一起跳舞。盛李豪2004年出生于江苏苏州张家港市,13岁开始接触射击。2018年他入选江苏省射击队,次年又进入了国家队。在2020年的东京奥运会上,首次参赛的…

余承东:不能为低成本而牺牲质量 质量是生命线

华为常务董事、终端BG董事长余承东在今日的未来汽车先行者大会上表示,华为采用的宁德时代电池已经提前五年达到了新的国家标准。他强调,在华为的质量标准体系下,有些车企甚至无法出货一台车。余承东呼吁大家重视产品质量,不要为了过分追求低成本而牺牲质量。他认为,质量是…

李健演唱会遇暴雨全程不打伞 敬业精神感动歌迷

李健的巡回演唱会在各地都受到了热烈欢迎。然而,在5月31日晚嘉兴站的演出中,天空突然下起了大雨。尽管如此,李健依然坚持在雨中完成表演,他的敬业精神让人感动。当晚,暴雨如注,李健的衣服和头发都被淋湿,雨水顺着脸颊流下,但这些都没有影响他与歌迷的热情互动。李健的妻…

消费者从黄金“转战”铂金 投资新宠崛起

陈女士是一位热衷于投资的人,最近她在铂金市场上进行了大额投资。她认为铂金市场出现了缺货和抢货现象,且铂金价格在底部徘徊多年,上涨概率较大。4月2日,她以接近120万元的资金购买了10斤铂金条和铂金板料。5月下旬,铂金价格迅速上涨,纽约商品交易所的铂金期货主力合约一…