【LVGL快速入门】LVGL开源框架入门教程之框架移植(四)

简介: 【LVGL快速入门】LVGL开源框架入门教程之框架移植(四)

三.设置心跳

在main.c文件中添加头文件:


#include "lvgl.h"//LVGL头文件引用

#include "lv_port_disp.h"//LVGL显示支持

#include "lv_port_indev.h"// LVGL的触摸支持

然后就可以在主函数中写入初始化代码了:


lv_init();                             // LVGL 初始化

lv_port_disp_init();                   // 注册LVGL的显示任务

lv_port_indev_init();                  // 注册LVGL的触屏检测任务

心跳:lv_tick_inc(),LVGL内一个时基函数,它的所有任务调度都要依靠这个函数,所以这个函数必须要被间隔精确地调用。


增加LVGL的内部时间戳。

该时间戳用于计算动画的进度、定时器触发、任务调度等。

任务处理函数:lv_timer_handler()。


执行所有已注册的定时器回调函数。

处理 LVGL 的内部任务,例如动画、定时器重绘等。

1.赋予LVGL心跳

       首先我们使用TIM创建一个定时器,以中断来为LVGL赋予心跳。笔者的开发平台是STM32F407,这里选择TIM6基本定时器。

 由于TIM6挂载在APB1总线上,所以最高频率为84MHz, 所以PSC设置为84-1,同时ARR设置为1000-1,计算出来定时周期为1ms。

同时使能中断,并设置优先级为0(最高优先级):

然后生成文件,更新工程。在mian()主函数中,LVGL初始化之后调用定时器启动函数HAL_TIM_Base_Start_IT(&htim6)。


在main.c下面的用户代码区添加中断回调函数:


void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

if(htim->Instance == TIM6)

{

 lv_tick_inc(1);//心跳函数

}

}

在回调函数中,我们调用lv_tick_inc(1)即设置1ms的心跳。


如果设置TIM产生2ms的中断,也可以写lv_tick_inc(2)。

2.开启任务调度

向main()主函数的while循环中添加5ms轮询调用:


while (1)

 {

  #ifdef USE_LVGL

 static uint8_t LVGL_Timer_5ms = 0;//任务调度函数的5ms定时

 

 

 

 HAL_Delay(1-1);

 if(LVGL_Timer_5ms++ >= 5)

 {

  lv_timer_handler();//任务调度函数

  LVGL_Timer_5ms = 0;

 }

  #else

 

  #endif

 

   /* USER CODE END WHILE */


   /* USER CODE BEGIN 3 */

 }

这里为什么在主函数中调用而不在定时器中断里调用呢?主要是因为 lv_timer_handler()这个函数十分消耗资源,若在定时器中调用的话可能会霸占整个中断资源,我们初学时就知道不能在中断中处理过于复杂的任务,所以我们不在中断里去处理LVGL的任务调用。


编译后无错误:


至此,我们整个移植过程完全结束,接下来就可以进行功能地编写调试,开启真正的LVGL框架学习。




相关文章
|
1天前
|
C语言 图形学 芯片
|
1天前
【LVGL快速入门】LVGL开源框架入门教程之框架移植(二)
【LVGL快速入门】LVGL开源框架入门教程之框架移植(二)
|
1天前
【LVGL快速入门】LVGL开源框架入门教程之框架移植(三)
【LVGL快速入门】LVGL开源框架入门教程之框架移植(三)
|
2月前
|
定位技术 C# 图形学
从零开始的unity3d入门教程(二)----基本功能讲解
这是一篇Unity3D入门教程,详细介绍了Unity界面操作、游戏物体创建修改、场景搭建、玩家控制、音效添加以及游戏测试和导出的全过程。
从零开始的unity3d入门教程(二)----基本功能讲解
|
1月前
|
API 开发工具 Android开发
从安装到打包,手把手教你如何在Uno Platform上部署跨平台应用——一篇详尽的开发者指南
【9月更文挑战第7天】Uno Platform 是一个跨平台应用开发框架,利用UWP API构建Web、iOS、Android等多平台应用。本文详述了安装Uno Platform SDK、配置项目支持跨平台、添加主方法以及使用命令行工具进行应用打包的过程,助您快速上手 Uno Platform 并部署应用。通过简单的代码示例,让开发者轻松掌握从安装到发布的核心步骤。
99 2
|
2月前
|
开发者 C# UED
如何轻松将WinUI控件引入Web应用?Uno Platform实战攻略——从环境搭建到性能优化,一探究竟!
【8月更文挑战第31天】Uno Platform 通过支持 WebAssembly,将 WinUI 控件无缝带入 Web,为多平台开发提供了新途径。本文介绍如何在 Web 中使用 WinUI 控件,包括环境搭建、控件使用、性能优化、样式调整及测试调优,助力开发者打造高质量跨平台应用。
46 0
|
5月前
|
UED C++ Python
GUI开发入门指南
GUI开发入门指南
|
5月前
|
缓存 Rust 前端开发
【一起学Rust | 框架篇 | Tauri2.0框架】Tauri2.0环境搭建与项目创建
【一起学Rust | 框架篇 | Tauri2.0框架】Tauri2.0环境搭建与项目创建
524 0
|
传感器 编解码 缓存
实战贴:开源GUI LittlevGL在MCU上的移植
实战贴:开源GUI LittlevGL在MCU上的移植
229 2
|
JavaScript 开发工具 开发者
openHarmony开发环境搭建
从今天开始正式写openHarmony相关的文章,经过一段时间的沉淀,学习之路漫漫,不断地学习才是王道,熟话说万事开头难,安装软件应该是学习的第一道坎,废话不多说了,看内容了~~
307 0
openHarmony开发环境搭建