安信可ESP32 LVGL_V8 最快移植攻略

安信可ESP32 LVGL_V8 最快移植攻略

系列文章地址:ESP32 LVGLV7最快移植攻略

此篇为发稿前最新的移植,如需要Lvgl V7 可参考上文。

本文来自于安信可科技开发者据说这是zzy的分享~

软件环境

  • VSCODE-ESP32-IDF4.4 插件版 支持ESP32-S3
  • LVGL project for ESP32 master分支
  • LVGL V8master分支

硬件环境

ESP-S3-12K开发板介绍

ESP-S3-12K-Kit 开发板是安信可针对 ESP-S3-12K 模组而设计的一款核心开发板, 该开发板延续了 NodeMCU 开发板的经典设计,引出全部 I/O 至两侧的排针,开发者可 以根据自己的需求连接外设。使用面包板进行开发和调试时,两侧的 2.54mm 间距排针 可以使操作更加简单方便。

开发板的参数

在这里插入图片描述

可以看到安信可ESP32-S3-12k开发板不仅板载了8M Byte的SPI Flash更搭配了8M Byte的Psram

ESP32S3的SPI

ESP32-S3 共有四个 SPI(SPI0,SPI1,SPI2 和 SPI3)。SPI0 和 SPI1 可以配置成 SPI 存储器模式,SPI2 和 SPI3 可以配置成通用 SPI 模式。

SPI 存储器 (SPI Memory) 模式 SPI

存储器模式(SPI0 和 SPI1)用于连接 SPI 接口的外部存储器。SPI 存储器模式下数据传输长度以字节 为单位,最高支持八线 SDR/DDR(单数据采样沿/双数据采样沿)读写操作。时钟频率可配置,最高支持 OPI 120 MHz SDR/DDR 模式。

SPI2 通用 SPI (GP­SPI) 模式

SPI2 既可以配置成主机模式,又可以配置成从机模式。主机模式支持双线全双工和单线、双线、四线或 八线半双工通信;从机模式支持双线全双工和单线、双线或四线半双工通信。通用 SPI 的主机时钟频率可 配置;数据传输长度以字节为单位;时钟极性 (CPOL) 和相位 (CPHA) 可配置;可连接 DMA 通道。

SPI3 通用 SPI (GP­SPI) 模式

SPI3 既可以配置成主机模式,又可以配置成从机模式,具有双线全双工和单线、双线或四线半双工通信 功能,仅支持 SDR 读写操作。通用 SPI 的主机时钟频率可配置;数据传输长度以字节为单位;时钟极性 (CPOL) 和相位 (CPHA) 可配置;可连接 DMA 通道。

通常情况下,ESP32-S3 和 flash 芯片的数据端口连接关系是:

在这里插入图片描述

在安信可的模块中使用的是四线SPI,具体占用的引脚是:

在这里插入图片描述

对应的是GPIO是:

在这里插入图片描述

使用的时候需要注意,不能使用这几个引脚。当然能开发板上并没有引出这几个引脚,在一定程度上也做到了规避。

LVGL_V8移植指北

首先是源代码的下载:

你可以通过下载我移植好的代码直接使用或者从github上下载最新的代码(当然截至文章发布我的也是最新的代码)。

直接使用我的代码:

gitee代码地址.

git的方式下载代码:

首先下载最新的LVGL V8,直接下载master分支即可:

git clone [email protected]:lvgl/lvgl.git

再下载最新的适用于ESP32的驱动:

git clone [email protected]:lvgl/lvgl_esp32_drivers.git

下载完成后可以看到文件夹下两个项目:

在这里插入图片描述

然后我们再来新建一个ESP32项目,这里为了简单,就新建一个blink项目:

在这里插入图片描述

选择blink项目,在合适的位置创建项目:

在这里插入图片描述

找到你创建的项目:

在这里插入图片描述

在项目目录下创建一个components文件夹:

在这里插入图片描述

将刚刚下载的代码放入项目文件夹:

在这里插入图片描述

再使用VScode打开项目文件夹:

你可以看到项目文件夹位置多出来的lvgl和驱动:

在这里插入图片描述

接下来我们来修改代码和配置项目:

首先是修改芯片型号:

点击下图位置

在这里插入图片描述

选择ESP32-S3

在这里插入图片描述

再打开配置项目:

找到LVGL配置项目,如果你的配置项目没有LVGL请重新打开VSCode;

打开以后可以看见四个关键配置项目:

在这里插入图片描述

再点击对应驱动的配置项:

我这里使用的是ST7789V,所以我这里下边出现的是对应驱动的配置项目:

在这里插入图片描述

打开以后需要配置的脚如下:

在这里插入图片描述

注意这些是默认的脚,我们需要进行一些修改来适配S3:

在这里插入图片描述

因为ST7735S、ST7789在接收16位颜色值时是高位在前的16位短整型。而ESP32因为是小端模式,DMA在发送16位数据时,会先发低8位字节再发送高8位字节,这就造成了数据不一至!所以需要勾选一下,勾选后,就是调换了一下。如果你勾选了此选项造成颜色不对你可以不勾选。

在这里插入图片描述

如果你看到的不是白底黑字,而是颜色反过来的,你可以勾选这个选项来矫正颜色。

在这里插入图片描述

修改完成后配置项目基本就完成了。

接下来修改代码:

首先就是在 lvgl_helpers.h 的下面添加几个宏定义:

在这里插入图片描述

#define LV_HOR_RES_MAX 240
#define LV_VER_RES_MAX 240
#define SPI_HOST_MAX 3

再来修改一下lvgl_helpers.c的这个位置的代码:

在这里插入图片描述

将源代码修改成esp_err_t ret = spi_bus_initialize(host, &buscfg, (spi_dma_chan_t)SPI_DMA_CH_AUTO);

可以在这里先编一下,看一下会不会报错,如果没有报错就开始写lvgl的代码。

当然初始化LVGL的代码我已经写好了,就在项目里面,你可以直接Download下来使用:

下载后找到这两个文件放在main目录下:

他的路径就在:./main/…

在这里插入图片描述

单单添加文件并不能让他们参加编译我们还需要手动添加一下:

打开main目录下的CMAKELists,添加如下内容:

在这里插入图片描述

回到main.c:

添加头文件支持:

在这里插入图片描述

修改app_main函数,为其添加lvgl初始化线程:

void app_main(void)
{
    
    
    /* Configure the IOMUX register for pad BLINK_GPIO (some pads are
       muxed to GPIO on reset already, but some default to other
       functions and need to be switched to GPIO. Consult the
       Technical Reference for a list of pads and their default
       functions.)
    */
    xTaskCreatePinnedToCore(guiTask, "gui", 4096*2, NULL, 1, NULL, 1);
    gpio_reset_pin(BLINK_GPIO);
    /* Set the GPIO as a push/pull output */
    gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
    while(1) {
    
    
        /* Blink off (output low) */
        printf("Turning off the LED\n");
        gpio_set_level(BLINK_GPIO, 0);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        /* Blink on (output high) */
        printf("Turning on the LED\n");
        gpio_set_level(BLINK_GPIO, 1);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}

再次编译,下载后就可以看到效果:

在这里插入图片描述

感谢本文作者据说这是zzy的分享~
阅读原文:https://blog.csdn.net/qq_20540901/article/details/123608655?spm=1001.2014.3001.5501

猜你喜欢

转载自blog.csdn.net/Boantong_/article/details/123677448