嵌入式系统应用-第十章 LVGL的移植到基于STM32的工程

第十章 LVGL的嵌入式系统移植移植STM32的工程

10.1 添加lvglpack库,安装lvgl的pack

下载LVGL的pack库,然后点击安装就可以。

10.2 添加对应的库

下载KEIL-LVGL的系统库,然后安装到默认系统中。
安装好库后,可以添加LVGL的库到工程中。点击系统库,然后找到LVGL,选择对应的库。 然后点击确定,就可以添加库到系统中。

嵌入式系统应用-第十章 LVGL的移植到基于STM32的工程_第1张图片
以下是三个主要模块:

Porting:是接口模板
Extra Themes: 核心模组
Essential: 拓展服务

10.3 核心文件配置

10.3.1 添加宏定义

添加宏定义:LV_CONF_INCLUDE_SIMPLE
嵌入式系统应用-第十章 LVGL的移植到基于STM32的工程_第2张图片

10.3.2 配置lv_conf.h 文件

找到lv_conf_cmsis.h的文件。
嵌入式系统应用-第十章 LVGL的移植到基于STM32的工程_第3张图片
全部复制该文件的内容到空白文件,保存到
en.stm32f4_dsp_stdperiph_lib_v1.8.0\STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Templates\MDK-ARM\RTE\LVGL

嵌入式系统应用-第十章 LVGL的移植到基于STM32的工程_第4张图片
修改lv_conf.h 的文件中0到1:

嵌入式系统应用-第十章 LVGL的移植到基于STM32的工程_第5张图片

10.3.3 disp_template.c

disp_template.c 的 0 改为1
嵌入式系统应用-第十章 LVGL的移植到基于STM32的工程_第6张图片

lv_port_disp_template.c ,添加 #define MY_DISP_HOR_RES 480
嵌入式系统应用-第十章 LVGL的移植到基于STM32的工程_第7张图片
屏蔽example 2 和 example 3嵌入式系统应用-第十章 LVGL的移植到基于STM32的工程_第8张图片

10.3.4 lv_port_indev_template.c

配置 lv_port_indev_template.c 的0 为1
嵌入式系统应用-第十章 LVGL的移植到基于STM32的工程_第9张图片

10.4 把图形库和硬件结合在一起

添加disp_init 驱动函数: ILI9486_Init(dev);

嵌入式系统应用-第十章 LVGL的移植到基于STM32的工程_第10张图片

添加绘制绘点函数

嵌入式系统应用-第十章 LVGL的移植到基于STM32的工程_第11张图片

10.5 移植界面文件到当前工程

10.5.1 添加第八章完成的界面文件,到当前工程。

嵌入式系统应用-第十章 LVGL的移植到基于STM32的工程_第12张图片

10.5.2 添加宏定义

添加 ,LV_LVGL_H_INCLUDE_SIMPLE 到工程
嵌入式系统应用-第十章 LVGL的移植到基于STM32的工程_第13张图片

10.6 初始化基本流程

1、调用lv_init()的初始化函数;
2、初始化驱动器的硬件;
3、注册屏幕和输入设备;
4、创建线程xms调用lv_tick_inc(x);
5、调用lv_timer_handler(); 每个20ms调用这个函数,初始化lvgl的相关的任务.

10.6.1 创建一个线程来,告诉lLVGL的多少时间流逝。

void tick_thread (void *args)
{
	while(1) {
		rt_thread_mdelay(5); /*Sleep for 5 millisecond*/
		lv_tick_inc(5); /*Tell LVGL that 5 milliseconds were elapsed*/
	}
}

To handle the tasks of LVGL you need to call lv_timer_handler()

10.6.2 创建一个线程来,来处理LVGL的任务

这个线程的优先级要低于前面那个线程 tick_thread,同时为了防止线程变化需要增加互斥量。

void lvgl_thread(void)
{
	Main_Frame();
	
	 while(1)  // µÆÉÁ˸³ÌÐò
	 {
			rt_mutex_take(&lvgl_mutex,RT_WAITING_FOREVER);
			lv_task_handler();
			rt_mutex_release(&lvgl_mutex);

			rt_thread_mdelay(10); /* sleep for 10 ms */
		}
}

主程序 ,创建和初始化线程

int main(void)
{
	
	  
		lv_init();   // ³õʼ»¯lvgl¿â£¬¶ÔÓ¦µÄÓ²¼þ
		lv_port_disp_init(); 
		rt_thread_init(&tick_thread,"tick",tick_thread_entry,RT_NULL,&tick_thread_stack[0],
		sizeof(tick_thread_stack),3 , THREAD_TIMESLICE);
		rt_thread_startup(&tick_thread);
	
		  // ´´½¨»¥³âÁ¿
	
	  rt_err_t err;
	  err=rt_mutex_init(&lvgl_mutex,"mutext_lvgl",RT_IPC_FLAG_FIFO);
	  if(err!=RT_EOK)
		{
			rt_kprintf("mutex fail\r\n");
			while(1);
		}

		err=rt_thread_init(&main_thread,"gui",main_thread_entry,RT_NULL,&main_thread_stack[0],
		sizeof(main_thread_stack),5, THREAD_TIMESLICE);
		err=rt_thread_startup(&main_thread);

}

10.6.3 显示结果

嵌入式系统应用-第十章 LVGL的移植到基于STM32的工程_第14张图片
到此显示驱动和对应界面已经移植到屏幕上面了,下面11章继续介绍如何操作移植输入设备。

你可能感兴趣的:(嵌入式系统应用,stm32,嵌入式硬件,单片机)