OpenEdv-开源电子网

 找回密码
 立即注册
查看: 932|回复: 1

ESP32-IDF5.1.2-LVGL9.1移植

[复制链接]

10

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2014-8-14
在线时间
129 小时
发表于 2024-6-20 16:16:24 | 显示全部楼层 |阅读模式
正点原子ESP32开发板例程有LVGL例程,版本是8.3的,但我复制LVGL到自己的工程里始终无法正确编译,应该还是文件依赖没有搞对。
然后在乐鑫的组件库里找到了LVGL9.1版本的库,尝试着移植使用一下。
本帖分享最基本的文本显示,未对显示接口做任何优化,仅使用画点接口,但这也是最简单的。
2.jpg
进入正题:
1.使用任何可正常编译的ESP32的vscode工程。
----------------------------------------------------------------------------------------------------------------------
2.使用vscode打开ESP32工程,按下ctrl+shift+p调出控制台,输入“show component registry”
1.jpg
3.jpg
----------------------------------------------------------------------------------------------------------------------
3.搜索LVGL,选择"lvgl/lvgl v9.1.0"
4.jpg
----------------------------------------------------------------------------------------------------------------------
4.点击"install"安装lvgl
5.jpg
然后在其工程目录下会多出这两个东西
6.jpg
----------------------------------------------------------------------------------------------------------------------
5.进入工程配置,搜索lvgl
7.jpg
我只修改了Operating System (OS)一项,选择FreeRTOS即可
8.jpg
-----------------------------------------------------------开始进入编码环节-----------------------------------------------------------
6.添加头文件
#include "../managed_components/lvgl__lvgl/src/lvgl.h"

----------------------------------------------------------------------------------------------------------------------
7.初始化LVGL
  1. static void my_flush_cb(lv_display_t * disp, const lv_area_t * area, uint8_t * px_map)
  2. {

  3.         uint16_t * buf16 = (uint16_t *)px_map;
  4.         int32_t x, y;
  5.         for(y = area->y1; y <= area->y2; y++)
  6.         {
  7.                 for(x = area->x1; x <= area->x2; x++)
  8.                 {
  9.                         SPILCD_DrawPoint(x, y, *buf16);
  10.                         buf16++;
  11.                 }
  12.         }

  13.         /* IMPORTANT!!!
  14.         * Inform LVGL that you are ready with the flushing and buf is not used anymore*/
  15.         lv_display_flush_ready(disp);

  16. }

  17. void GUI_Task(void *pvParameters)
  18. {

  19.         uint16_t *lv_disp_buf = NULL;

  20.         lv_disp_buf = heap_caps_malloc(SPILCD_BUFFER_SIZE, MALLOC_CAP_SPIRAM);

  21.         lv_init();

  22.         lv_display_t *lv_display = lv_display_create(spilcd_x_size, spilcd_y_size);
  23.         lv_display_set_flush_cb(lv_display, my_flush_cb);
  24.         lv_display_set_buffers(lv_display, lv_disp_buf, NULL, SPILCD_BUFFER_SIZE, LV_DISPLAY_RENDER_MODE_PARTIAL);

  25.         lv_tick_set_cb(xTaskGetTickCount);
  26.         lv_delay_set_cb(vTaskDelay);

  27.         lv_obj_t *label = lv_label_create(lv_scr_act());
  28.         lv_label_set_text(label, "LVGL - ESP32");
  29.         lv_obj_center(label);

  30.         for(;;)
  31.         {

  32.                 vTaskDelay(10);

  33.                 lv_timer_handler();

  34.         }

  35. }
复制代码
lv_display_set_flush_cb - 就是设置屏幕显示
我看了正点原子lvgl-8.3的例程,很多接口在v9版本中改了,那么我是参考百问网的移植教程来移植的,还是比较简单:https://lvgl.100ask.net/9.1/index.html#
另外关于lvgl的时钟部分,设置lv_tick_set_cblv_delay_set_cb即可,并在任务中周期调用lv_timer_handler即可
至于lv_tick_inc这个函数,可以再设置了lv_tick_set_cb后可以不需要再调用了
10.jpg

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2024-9-20
在线时间
6 小时
发表于 2024-11-3 22:53:56 | 显示全部楼层
同一开发板,收藏了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 10:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表