下载LVGL的pack库,然后点击安装就可以。
下载KEIL-LVGL的系统库,然后安装到默认系统中。
安装好库后,可以添加LVGL的库到工程中。点击系统库,然后找到LVGL,选择对应的库。 然后点击确定,就可以添加库到系统中。
Porting:是接口模板
Extra Themes: 核心模组
Essential: 拓展服务
找到lv_conf_cmsis.h的文件。
全部复制该文件的内容到空白文件,保存到
en.stm32f4_dsp_stdperiph_lib_v1.8.0\STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Templates\MDK-ARM\RTE\LVGL
lv_port_disp_template.c ,添加 #define MY_DISP_HOR_RES 480
屏蔽example 2 和 example 3
配置 lv_port_indev_template.c 的0 为1
添加disp_init 驱动函数: ILI9486_Init(dev);
添加绘制绘点函数
添加 ,LV_LVGL_H_INCLUDE_SIMPLE 到工程
1、调用lv_init()的初始化函数;
2、初始化驱动器的硬件;
3、注册屏幕和输入设备;
4、创建线程xms调用lv_tick_inc(x);
5、调用lv_timer_handler(); 每个20ms调用这个函数,初始化lvgl的相关的任务.
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()
这个线程的优先级要低于前面那个线程 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);
}