演示视频
LVGL文档
Github仓库
C3修改版仓库
(什么时候可以买到ESP32-H2啊)
截止到2021-9-19(中秋放假第一天)LVGL官方并不支持ESP-C3型号,建议直接使用C3修改版的仓库。下面介绍的基于官方仓库如何修改的过程
ESP32 | LCD | 说明 |
---|---|---|
REST | 18 | 上电后必须进行复位 |
SPI_CS | 10 | 当片选信号为"L"时,数据/指令 I/O 口使能。 |
SPI_CLK | 6 | SPI时钟 |
SPI_DC | 9 | 指令/数据 选择端口:“H” : 数据 ;“L” : 指令。 |
SPI_MOSI | 7 | 主机输出从机输入 |
如何基于官方仓库修改为支持ESP32-C3:
git clone --recurse-submodules https://github.com/lvgl/lv_port_esp32.git
ESP32 | LCD | 说明 |
---|---|---|
REST | 18 | 上电后必须进行复位 |
SPI_CS | 10 | 当片选信号为"L"时,数据/指令 I/O 口使能。 |
SPI_CLK | 6 | SPI时钟 |
SPI_DC | 9 | 指令/数据 选择端口:“H” : 数据 ;“L” : 指令。 |
SPI_MOSI | 7 | 主机输出从机输入 |
修改配置文件后,编译会出现以下错误,根据错误进行修改。(错误信息忘记保存了)
#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。
#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
//改为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分配
//取消引脚内部调用
//将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