ESP32-C3移植LVGL

演示视频
LVGL文档

Github仓库

C3修改版仓库
(什么时候可以买到ESP32-H2啊)
截止到2021-9-19(中秋放假第一天)LVGL官方并不支持ESP-C3型号,建议直接使用C3修改版的仓库。下面介绍的基于官方仓库如何修改的过程
在这里插入图片描述

ESP32LCD说明
REST18上电后必须进行复位
SPI_CS10当片选信号为"L"时,数据/指令 I/O 口使能。
SPI_CLK6SPI时钟
SPI_DC9指令/数据 选择端口:“H” : 数据 ;“L” : 指令。
SPI_MOSI7主机输出从机输入

如何基于官方仓库修改为支持ESP32-C3:

  • 2寸LCD屏幕,分辨率240*320,驱动为ST7789
  • 所需要VSCode ESP-IDF 版本4.3
  • LVGL版本7.9

下载并打开项目

  1. 克隆项目
git clone --recurse-submodules https://github.com/lvgl/lv_port_esp32.git
  1. 使用VSCode导入项目
    请添加图片描述
  2. 快捷键command+shift+P设置目标芯片为ESP32-C请添加图片描述

修改配置

  1. 打开配置工具(下方菜单栏中的齿轮⚙️)
  2. 设置分辨率
    请添加图片描述
  3. 根据情况选择TFT屏幕驱动型号,示例采用的是ST7789请添加图片描述
  4. 配置引脚,详情如下面表格请添加图片描述
ESP32LCD说明
REST18上电后必须进行复位
SPI_CS10当片选信号为"L"时,数据/指令 I/O 口使能。
SPI_CLK6SPI时钟
SPI_DC9指令/数据 选择端口:“H” : 数据 ;“L” : 指令。
SPI_MOSI7主机输出从机输入
  1. 不要忘记保存配置

修改ESP32-C3所需要的文件

修改配置文件后,编译会出现以下错误,根据错误进行修改。(错误信息忘记保存了)

  1. 修改HSPI_HOST,在lvgl_spi_config.h大约67行上下:
#if defined (CONFIG_LV_TFT_DISPLAY_SPI_HSPI)
    #if CONFIG_IDF_TARGET_ESP32C3
        #define TFT_SPI_HOST SPI2_HOST
    #else
        #define TFT_SPI_HOST HSPI_HOST
    #endif
#elif defined (CONFIG_LV_TFT_DISPLAY_SPI_VSPI)
#define TFT_SPI_HOST VSPI_HOST
#elif defined (CONFIG_LV_TFT_DISPLAY_SPI_FSPI)
#define TFT_SPI_HOST FSPI_HOST
#endif

说明:如果判断芯片目标为C3,将使用SPI2_HOST。

  1. 在lvgl_helpers.c中207行左右:
#if defined (CONFIG_IDF_TARGET_ESP32)
    assert((SPI_HOST <= host) && (VSPI_HOST >= host));
    const char *spi_names[] = {
        "SPI_HOST", "HSPI_HOST", "VSPI_HOST"
    };
#elif defined (CONFIG_IDF_TARGET_ESP32S2)
    assert((SPI_HOST <= host) && (HSPI_HOST >= host));
    const char *spi_names[] = {
        "SPI_HOST", "", ""
    };
#elif defined (CONFIG_IDF_TARGET_ESP32C3)
    // assert((SPI_HOST <= host) && (HSPI_HOST >= host));
    const char *spi_names[] = {
        "SPI2_HOST", "", ""
    };
#endif

说明:如果判断芯片目标为C3,添加SPI2_HOST

  1. 在lvgl_helpers.c中111行左右:
//改为2 SPI_DMA_CH_AUTO
lvgl_spi_driver_init(TFT_SPI_HOST,
        DISP_SPI_MISO, DISP_SPI_MOSI, DISP_SPI_CLK,
        SPI_BUS_MAX_TRANSFER_SZ, SPI_DMA_CH_AUTO,
        DISP_SPI_IO2, DISP_SPI_IO3);

说明:C3只能使用自动DMA分配

  1. 在ST7789.c 91行-100号:
//取消引脚内部调用
//将gpio_pad_select_gpio改为gpio_reset_pin

    //Initialize non-SPI GPIOs
    gpio_reset_pin(ST7789_DC);
    gpio_set_direction(ST7789_DC, GPIO_MODE_OUTPUT);

#if !defined(CONFIG_LV_DISP_ST7789_SOFT_RESET)
    gpio_reset_pin(ST7789_RST);
    gpio_set_direction(ST7789_RST, GPIO_MODE_OUTPUT);
#endif

#if ST7789_ENABLE_BACKLIGHT_CONTROL
    gpio_reset_pin(ST7789_BCKL);
    gpio_set_direction(ST7789_BCKL, GPIO_MODE_OUTPUT);
#endif

说明:示例用REST引脚为18,18引脚被用作USB-,需要取消内部调用,也可以参考下面函数:

#if CONFIG_IDF_TARGET_ESP32C3
#include "hal/gpio_ll.h"
#endif
	
#if CONFIG_IDF_TARGET_ESP32C3
		if (GPIO_BL == 18 || GPIO_BL== 19) {
			CLEAR_PERI_REG_MASK(USB_DEVICE_CONF0_REG, USB_DEVICE_USB_PAD_ENABLE);
		}
    	#endif
  1. 完成以上四个步骤,烧写程序效果如果:
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值