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:
- 2寸LCD屏幕,分辨率240*320,驱动为ST7789
- 所需要VSCode ESP-IDF 版本4.3
- LVGL版本7.9
下载并打开项目
- 克隆项目
git clone --recurse-submodules https://github.com/lvgl/lv_port_esp32.git
- 使用VSCode导入项目
- 快捷键command+shift+P设置目标芯片为ESP32-C
修改配置
- 打开配置工具(下方菜单栏中的齿轮⚙️)
- 设置分辨率
- 根据情况选择TFT屏幕驱动型号,示例采用的是ST7789
- 配置引脚,详情如下面表格
ESP32 | LCD | 说明 |
---|---|---|
REST | 18 | 上电后必须进行复位 |
SPI_CS | 10 | 当片选信号为"L"时,数据/指令 I/O 口使能。 |
SPI_CLK | 6 | SPI时钟 |
SPI_DC | 9 | 指令/数据 选择端口:“H” : 数据 ;“L” : 指令。 |
SPI_MOSI | 7 | 主机输出从机输入 |
- 不要忘记保存配置
修改ESP32-C3所需要的文件
修改配置文件后,编译会出现以下错误,根据错误进行修改。(错误信息忘记保存了)
- 修改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。
- 在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
- 在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分配
- 在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
- 完成以上四个步骤,烧写程序效果如果: