【技术分享】星空派GD32开发板LVGL移植经验分享

发布者:真诚友爱最新更新时间:2024-11-08 来源: elecfans关键字:GD32开发板 手机看文章 扫描二维码
随时随地手机看文章

        


  /*Used to copy the buffer's content to the display*/

  disp_drv.flush_cb = disp_flush;


  /*Set a display buffer*/

  disp_drv.buffer = &disp_buf_1;


#if LV_USE_GPU

  /*Optionally add functions to access the GPU. (Only in buffered mode, LV_VDB_SIZE != 0)*/


  /*Blend two color array using opacity*/

  disp_drv.gpu_blend = gpu_blend;


  /*Fill a memory array with a color*/

  disp_drv.gpu_fill = gpu_fill;

#endif


  /*Finally register the driver*/

  lv_disp_drv_register(&disp_drv);

}


/**********************

 *  STATIC FUNCTIONS

 **********************/


/* Initialize your display and the required peripherals. */

static void disp_init(void)

{

  /*You code here*/

}


/* Flush the content of the internal buffer the specific area on the display

 * You can use DMA or any hardware acceleration to do this operation in the background but

 * 'lv_disp_flush_ready()' has to be called when finished. */

static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)

{

        LCD_Color_Fill(area->x1,area->y1,area->x2,area->y2,(u16*)color_p);

  /* IMPORTANT!!!

   * Inform the graphics library that you are ready with the flushing*/

  lv_disp_flush_ready(disp_drv);

}



/*OPTIONAL: GPU INTERFACE*/

#if LV_USE_GPU


/* If your MCU has hardware accelerator (GPU) then you can use it to blend to memories using opacity

 * It can be used only in buffered mode (LV_VDB_SIZE != 0 in lv_conf.h)*/

static void gpu_blend(lv_disp_drv_t * disp_drv, lv_color_t * dest, const lv_color_t * src, uint32_t length, lv_opa_t opa)

{

  /*It's an example code which should be done by your GPU*/

  uint32_t i;

  for(i = 0; i < length; i++) {

    dest[i] = lv_color_mix(dest[i], src[i], opa);

  }

}


/* If your MCU has hardware accelerator (GPU) then you can use it to fill a memory with a color

 * It can be used only in buffered mode (LV_VDB_SIZE != 0 in lv_conf.h)*/

static void gpu_fill_cb(lv_disp_drv_t * disp_drv, lv_color_t * dest_buf, lv_coord_t dest_width,

          const lv_area_t * fill_area, lv_color_t color);

{

  /*It's an example code which should be done by your GPU*/

  uint32_t x, y;

  dest_buf += dest_width * fill_area->y1; /*Go to the first line*/


  for(y = fill_area->y1; y < fill_area->y2; y++) {

    for(x = fill_area->x1; x < fill_area->x2; x++) {

      dest_buf[x] = color;

    }

    dest_buf+=dest_width;  /*Go to the next line*/

  }

}


#endif /*LV_USE_GPU*/


#else /* Enable this file at the top */


/* This dummy typedef exists purely to silence -Wpedantic. */

typedef int keep_pedantic_happy;

#endif

lv_port_indev.c


/**


 * @file lv_port_indev.c


 *


 */


 /*Copy this file as 'lv_port_indev.c' and set this value to '1' to enable content*/


#if 1


/*********************


 *   INCLUDES


 *********************/


#include 'lv_port_indev.h'


#include 'touch.h'


/*********************


 *   DEFINES


 *********************/


/**********************


 *   TYPEDEFS


 **********************/


/**********************


 * STATIC PROTOTYPES


 **********************/


static bool touchpad_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data);


/**********************


 * STATIC VARIABLES


 **********************/


/**********************


 *   MACROS


 **********************/


/**********************


 *  GLOBAL FUNCTIONS


 **********************/


void lv_port_indev_init(void)


{


  lv_indev_drv_t indev_drv;


  /*------------------


   * Touchpad


   * -----------------*/


  /*Register a touchpad input device*/


  lv_indev_drv_init(&indev_drv);


  indev_drv.type = LV_INDEV_TYPE_POINTER;


  indev_drv.read_cb = touchpad_read;


  lv_indev_drv_register(&indev_drv);


}


/**********************


 *  STATIC FUNCTIONS


 **********************/


/* Will be called by the library to read the touchpad */


static bool touchpad_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data)


{


        static uint16_t last_x = 0;


        static uint16_t last_y = 0;


        if(tp_dev.sta&TP_PRES_DOWN)//触摸按下了


        {


            last_x = tp_dev.x[0];


            last_y = tp_dev.y[0];


            data->point.x = last_x;


            data->point.y = last_y;


            data->state = LV_INDEV_STATE_PR;


        }else{


            data->point.x = last_x;


            data->point.y = last_y;


            data->state = LV_INDEV_STATE_REL;


        }


  /*Return `false` because we are not buffering and no more data to read*/


  return false;


}


#else /* Enable this file at the top */


/* This dummy typedef exists purely to silence -Wpedantic. */


typedef int keep_pedantic_happy;


#endif


在新建一个GUI_APP文件夹,把里面我们要展示的例子,添加进去~


904c3f1e-5280-11ec-b2e9-dac502259ad0.png


在main函数里面调用:

TIM1_Int_Init(999,119);//定时器初始化(1ms 中断),用于给 lvgl 提供 1ms 的心跳节拍

 LCD_Init();

 tp_dev.init();//触摸初始化


 

 lv_init();                        //lvgl系统初始化

    lv_port_disp_init();    //lvgl显示接口初始化,放在lv_init()的后面

    lv_port_indev_init();    //lvgl输入接口初始化,放在lv_init()的后面

    

    //通过TEST_NUM的值来选择运行不同的例程

    #if(TEST_NUM==1)

        demo_create();            

    #elif(TEST_NUM==2)

        lv_test_theme_1(lv_theme_night_init(210, NULL));

    #else

        lv_test_theme_2();

    #endif

    

    while(1)

    {

        tp_dev.scan(0);

        lv_task_handler();

    }

编译,查看效果。如前图。好了LVGL的移植就到这了


[1] [2] [3]
关键字:GD32开发板 引用地址:【技术分享】星空派GD32开发板LVGL移植经验分享

上一篇:GD32开发实战指南(基础篇) 第10章 串口通信
下一篇:最后一页

推荐阅读最新更新时间:2024-11-08 09:54

单片机---HLK-W801图形框架LVGL移植
背景介绍 最近接触到了一个开源的显示框架lvgl,在跑起了demo的时刻,发现这确实是个酷酷的东西。 LVGL的作者是来自匈牙利的Gabor Kiss-Vamosikisvegabor,LVGL用C语言编写,以实现最大的兼容性(与C ++兼容),模拟器可在没有嵌入式硬件的PC上启动嵌入式GUI设计,同时LVGL作为一个图形库,它自带着接近三十多种小工具可以供开发者使用。这些强大的构建块按钮搭配上带有非常丝滑的动画以及可以做到平滑滚动的高级图形,同时兼具着不高的配置要求以及开源属性,显著的优势使得LVGL蔚然成风,成为广大开发者在选择GUI时的第一选择。 demo的样子 这流畅的动画和体面的输入,一个字–绝。 代码
[单片机]
单片机---HLK-W801图形框架<font color='red'>LVGL</font><font color='red'>移植</font>
LVGL | lvgl最新版本在STM32上的移植使用
lvgl简介 LittlevGL是一个免费的开源图形库,提供了创建嵌入式GUI所需的一切,具有易于使用的图形元素、漂亮的视觉效果和低内存占用。 特点: 强大的构建模组 按钮、图表、列表、滑块、图像等 先进的图形 动画、反锯齿、半透明、平滑滚动 多样的输入设备 触摸板、鼠标、键盘、编码器等 多显示器支持 支持同时使用多个TFT或单色显示器 多语言支持 UTF-8格式文字编码 完全自定义 图形元素 硬件无关 可用于任意微控制器或显示器 可裁剪 用于小内存(80 KB FLASH,12 KB RAM)操作 操作系统、外部存储以及GPU 支持但非必须 单帧缓存 即可实现先进的图形效果 C语言编写 以最大化兼容(C
[单片机]
<font color='red'>LVGL</font> | <font color='red'>lvgl</font>最新版本在STM32上的<font color='red'>移植</font>使用
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved