学习笔记ESP32——lvgl disp移植(1)

目录

一、简介

二、GitHub上下载lvgl库

        1、下载lvgl库

三、准备一个工程

 四、修改工程

 五、对disp进行修改

​编辑

六、主函数的修改

七、硬件的修改

八、MUSIC示例演示

一、简介

        以esp32 idf导出的hello world例程,移植lvgl disp和indev驱动的学习笔记。

二、GitHub上下载lvgl库

        1、下载lvgl库

                如果进不去GitHub记得开vpn。

 我这里使用的是8.3版本的lvgl,所以下载该版本 

复制路径之后,在搜索栏粘贴,下载zip压缩包

解压到一个文件夹里

三、准备一个工程

导出一个hello world工程(前面的文章有讲),把lvgl和lvgl_driver放入component文件夹里,把lvgl和lvgl_driver文件名字后面的去掉

 四、修改工程

导入lvgl和driver后,先编译一下,修改报错

 定位到lv_helpers.c文件

    assert((0 <= host) && (SPI_HOST_MAX > host));
    const char *spi_names[] = {
        "SPI1_HOST", "SPI2_HOST", "SPI3_HOST"
    };

 把上面的报错的地方用下面的替换

#if defined(CONFIG_IDF_TARGET_ESP32)
    assert((SPI_HOST <= host) && (VSPI_HOST >= host));
    const char *spi_names[] = {
        "SPI_HOST", "HSPI_HOST", "VSPI_HOST"};

    dma_channel = SPI_DMA_CH_AUTO;
#elif defined(CONFIG_IDF_TARGET_ESP32S2)
    assert((SPI_HOST <= host) && (HSPI_HOST >= host));
    const char *spi_names[] = {
        "SPI_HOST", "", ""};

    dma_channel = SPI_DMA_CH_AUTO;
#elif defined(CONFIG_IDF_TARGET_ESP32C3)
    assert((SPI1_HOST <= host) && (SPI3_HOST >= host));
    const char *spi_names[] = {
        "SPI1_HOST", "SPI2_HOST", "SPI3_HOST"};

    dma_channel = SPI_DMA_CH_AUTO; /* SPI_DMA_CH_AUTO */;
#elif defined(CONFIG_IDF_TARGET_ESP32S3)
    assert((SPI1_HOST <= host) && (SPI3_HOST >= host));
    const char *spi_names[] = {
        "SPI_HOST", "HSPI_HOST", "VSPI_HOST"};
    dma_channel = SPI_DMA_CH_AUTO;
#else
#error "Target chip not selected"
#endif

继续编译

 这里是没有定义LV_HOR_RES_MAX,定义一下,放在前面。

#ifndef LV_HOR_RES_MAX
#define LV_HOR_RES_MAX (320)
#endif
#ifndef LV_VER_RES_MAX
#define LV_VER_RES_MAX (240)
#endif

继续编译,编译通过

 把lvgl→example→porting里的disp.c和.h文件复制,在component文件夹下新建一个文件夹lvgl_porting,把上面两个文件放在里面,此外还需要一个CMakeList文件和component.mk文件(之前的CMakeList简单使用文章里有讲),这里我直接放进去,把文件后面的template删掉,并修改CMakeList文件

 

 五、对disp进行修改

把两个文件的0 改成 1 ,对名字进行修改temp去掉

这里的define我们已经定义过,所以删除即可

 缓存方式选择双缓存,并且用lvgl_helper里帮我们定义好的替换

 继续修改,替换成定义好的,记得把原来的刷屏方式disp_flush 函数注释掉

 在屏幕初始化函数里加上自己的初始化函数

 因为在disp函数里调用了lvgl和lvgl_esp32_drivers里的函数,所以还要修改CMakeList

 删除build重新编译一下,编译通过,这里disp_flush函数的声明忘记注释了,所以有一个警告

六、主函数的修改

添加头文件、初始化函数和一个简单的心跳 

 在前面添加一个定时器任务

//用定时器给LVGL提供时钟
static void lv_tick_task(void *arg)
{
    (void)arg;
    lv_tick_inc(10);
}

 在主函数里创建一个定时器并回调

    /* 创建一个10ms定时器*/ // 定期处理GUI回调
   const esp_timer_create_args_t periodic_timer_args = {
       .callback = &lv_tick_task,
       .name = "periodic_gui"};
   esp_timer_handle_t periodic_timer;
   ESP_ERROR_CHECK(esp_timer_create(&periodic_timer_args, &periodic_timer));
   ESP_ERROR_CHECK(esp_timer_start_periodic(periodic_timer, 10 * 1000));

七、硬件的修改

点击左下角的小齿轮,进入设置

 根据自己的板子修改lvgl esp drivers

 我这里用的ST7789屏幕,勾选SPI clock frequency, 我的板子支持80MHz,一般选择40M即可

 根据自己的板子所接的引脚修改,我这里没有接背光,所以Not Used

 触屏现在还没用到,不过先配置好

 点击保存,重新编译。

八、MUSIC示例演示

 现在屏幕是没有现象的,下面用music实例眼演示一下

在设置里勾上Music,保存

主函数添加头文件lv_demos.h,编译出现字体报错

 在设置里把12和16字体勾选上,保存

 修改完成后编译,下载,可以正常显示,但是颜色不对,勾选上,即可正常显示

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值