中级会员
- 积分
- 462
- 金钱
- 462
- 注册时间
- 2014-8-14
- 在线时间
- 129 小时
|
正点原子ESP32开发板例程有LVGL例程,版本是8.3的,但我复制LVGL到自己的工程里始终无法正确编译,应该还是文件依赖没有搞对。
然后在乐鑫的组件库里找到了LVGL9.1版本的库,尝试着移植使用一下。
本帖分享最基本的文本显示,未对显示接口做任何优化,仅使用画点接口,但这也是最简单的。
进入正题:
1.使用任何可正常编译的ESP32的vscode工程。
----------------------------------------------------------------------------------------------------------------------
2.使用vscode打开ESP32工程,按下ctrl+shift+p调出控制台,输入“show component registry”
----------------------------------------------------------------------------------------------------------------------
3.搜索LVGL,选择"lvgl/lvgl v9.1.0"
----------------------------------------------------------------------------------------------------------------------
4.点击"install"安装lvgl
然后在其工程目录下会多出这两个东西
----------------------------------------------------------------------------------------------------------------------
5.进入工程配置,搜索lvgl
我只修改了Operating System (OS)一项,选择FreeRTOS即可
-----------------------------------------------------------开始进入编码环节-----------------------------------------------------------
6.添加头文件
#include "../managed_components/lvgl__lvgl/src/lvgl.h"
----------------------------------------------------------------------------------------------------------------------
7.初始化LVGL
- static void my_flush_cb(lv_display_t * disp, const lv_area_t * area, uint8_t * px_map)
- {
- uint16_t * buf16 = (uint16_t *)px_map;
- int32_t x, y;
- for(y = area->y1; y <= area->y2; y++)
- {
- for(x = area->x1; x <= area->x2; x++)
- {
- SPILCD_DrawPoint(x, y, *buf16);
- buf16++;
- }
- }
- /* IMPORTANT!!!
- * Inform LVGL that you are ready with the flushing and buf is not used anymore*/
- lv_display_flush_ready(disp);
- }
- void GUI_Task(void *pvParameters)
- {
- uint16_t *lv_disp_buf = NULL;
- lv_disp_buf = heap_caps_malloc(SPILCD_BUFFER_SIZE, MALLOC_CAP_SPIRAM);
- lv_init();
- lv_display_t *lv_display = lv_display_create(spilcd_x_size, spilcd_y_size);
- lv_display_set_flush_cb(lv_display, my_flush_cb);
- lv_display_set_buffers(lv_display, lv_disp_buf, NULL, SPILCD_BUFFER_SIZE, LV_DISPLAY_RENDER_MODE_PARTIAL);
- lv_tick_set_cb(xTaskGetTickCount);
- lv_delay_set_cb(vTaskDelay);
- lv_obj_t *label = lv_label_create(lv_scr_act());
- lv_label_set_text(label, "LVGL - ESP32");
- lv_obj_center(label);
- for(;;)
- {
- vTaskDelay(10);
- lv_timer_handler();
- }
- }
复制代码 lv_display_set_flush_cb - 就是设置屏幕显示
我看了正点原子lvgl-8.3的例程,很多接口在v9版本中改了,那么我是参考百问网的移植教程来移植的,还是比较简单:https://lvgl.100ask.net/9.1/index.html#
另外关于lvgl的时钟部分,设置lv_tick_set_cb和lv_delay_set_cb即可,并在任务中周期调用lv_timer_handler即可
至于lv_tick_inc这个函数,可以再设置了lv_tick_set_cb后可以不需要再调用了
|
|