添加库文件
1.项目中创建LVGL文件夹,文件夹下新建两个GUI和GUIU_APP两个文件夹

2.在GUI_APP文件中添加官网LVGL官方的demo实例文件
3.在GUI文件中复制LVGL官方的examples src lv_conf.h lvgl.h(将lv_conf.template.h更改为lv_conf.h 同时将lv_conf.h中的 if 0 改为 if 1)

配置文件
配置屏幕输出文件
1.把lv_port_disp_template.c/h的条件编译指令#if 0修改成#if 1
2.添加头文件

3.在disp_init()中加入屏幕初始化函数

4.配置缓冲区 MY_DISP_HOR_RES修改为屏幕分辨率

5.修改屏幕对应分辨率

6修改disp_flush()输出函数

配置控制输入文件
配置时钟
1.修改stm32f405xx.h中的__NVIC_PRIO_BITS为4

2.修改lv_conf.h中的时钟源配置

3.编写freetros线程代码
#include "lvgl_demo.h"
#include "FreeRTOS.h"
#include "task.h"
#include "lvgl.h"
//#include "lv_demo_stress.h"
#include "lv_port_disp_template.h"
#include "lv_port_indev_template.h"
/******************************************************************************************************/
/*FreeRTOS配置*/
/* START_TASK 任务 配置
* 包括: 任务句柄 任务优先级 堆栈大小 创建任务
*/
#define START_TASK_PRIO 1 /* 任务优先级 */
#define START_STK_SIZE 128 /* 任务堆栈大小 */
TaskHandle_t StartTask_Handler; /* 任务句柄 */
void start_task(void *pvParameters); /* 任务函数 */
/* LV_DEMO_TASK 任务 配置
* 包括: 任务句柄 任务优先级 堆栈大小 创建任务
*/
#define LV_DEMO_TASK_PRIO 1 /* 任务优先级 */
#define LV_DEMO_STK_SIZE 1024 /* 任务堆栈大小 */
TaskHandle_t LV_DEMOTask_Handler; /* 任务句柄 */
void lv_demo_task(void *pvParameters); /* 任务函数 */
/******************************************************************************************************/
void lvgl_demo(void)
{
lv_init(); /* lvgl系统初始化 */
lv_port_disp_init(); /* lvgl显示接口初始化,放在lv_init()的后面 */
lv_port_indev_init(); /* lvgl输入接口初始化,放在lv_init()的后面 */
xTaskCreate((TaskFunction_t )start_task, /* 任务函数 */
(const char* )"start_task", /* 任务名称 */
(uint16_t )START_STK_SIZE, /* 任务堆栈大小 */
(void* )NULL, /* 传递给任务函数的参数 */
(UBaseType_t )START_TASK_PRIO, /* 任务优先级 */
(TaskHandle_t* )&StartTask_Handler); /* 任务句柄 */
vTaskStartScheduler(); /* 开启任务调度 */
}
/**
* @brief start_task
* @param pvParameters : 传入参数(未用到)
* @retval 无
*/
void start_task(void *pvParameters)
{
pvParameters = pvParameters;
taskENTER_CRITICAL(); /* 进入临界区 */
/* 创建LVGL任务 */
xTaskCreate((TaskFunction_t )lv_demo_task,
(const char* )"lv_demo_task",
(uint16_t )LV_DEMO_STK_SIZE,
(void* )NULL,
(UBaseType_t )LV_DEMO_TASK_PRIO,
(TaskHandle_t* )&LV_DEMOTask_Handler);
taskEXIT_CRITICAL(); /* 退出临界区 */
vTaskDelete(StartTask_Handler); /* 删除开始任务 */
}
/**
* @brief LVGL运行例程
* @param pvParameters : 传入参数(未用到)
* @retval 无
*/
void lv_demo_task(void *pvParameters)
{
pvParameters = pvParameters;
//lv_demo_stress(); /* 测试的demo */
lv_obj_t* switch_obj = lv_switch_create(lv_scr_act());
lv_obj_set_size(switch_obj, 24, 12);
lv_obj_align(switch_obj, LV_ALIGN_CENTER, 0, 0);
while(1)
{
lv_timer_handler(); /* LVGL计时器 */
vTaskDelay(5);
}
}
4.将lvgl_demo();加入到主函数中即可
显示效果

1万+

被折叠的 条评论
为什么被折叠?



