ESP32-S3 学习笔记(2)-屏幕驱动和lvgl移植
首先展示成果
想要用这个屏幕,需要做两个事情:驱动、lvgl移植
1、ST7789驱动
我买的这个板子时由ST7789驱动芯片支持的,因此要想控制这个屏幕,我需要写驱动。
何为驱动:
可以这样理解
我们编写的程序可以控制mcu,即sep32,那我们如何控制屏幕显示内容呢?实际上,整个屏幕模块内部也有一个程序,可以显示,只是这个程序是产品出厂前厂商烧录进去的,为了方便控制,厂商留了一个接口,即st7789,我们可以通过操作st7789来间接的操作屏幕的显示行为。那么如果我们写出了一套通用的操作ST7789接口程序,就可以说写了一个屏幕驱动。
如何操作st7789,需要通过某种协议传输命令和数据,它支持spi或8080控制,此处使用spi来控制。
如何控制
找到引脚
因为esp32所有的引脚都支持复用,所以不需要关心esp的引脚。观察到,屏幕上由引脚
ST7789 | 作用 | esp32 |
GND | 接地 | |
VCC | 3.3v | |
SCL | 时钟引脚-------CLK | 12 |
SDA | 数据引脚-----MOSI | 11 |
RES | 复位 | 10 |
DC | 9 | |
CS | 片选 | 8 |
BLK | 背光 | 45 |
之所以没有miso,是因为esp不需要接收lcd的信息。
实现驱动
1、初始化
void st7789_driver_hw_init(lcd_flush_done_cb cb,void* cb_param)
{spi_bus_config_t spi_bus_cfg = {0};spi_bus_cfg.mosi_io_num = LCD_MOSI_GPIO;spi_bus_cfg.miso_io_num = LCD_GPIO_NC;spi_bus_cfg.sclk_io_num = LCD_CLK_GPIO;spi_bus_cfg.quadwp_io_num = LCD_GPIO_NC;spi_bus_cfg.quadhd_io_num = LCD_GPIO_NC;spi_bus_cfg.max_transfer_sz = LCD_WIDTH * 40 * sizeof(uint16_t);spi_bus_cfg.flags = SPICOMMON_BUSFLAG_MASTER;spi_bus_initialize(LCD_SPI_HOST, &spi_bus_cfg, SPI_DMA_CH_AUTO);// blkgpio_config_t bl_gpio_cfg ={.pull_up_en = GPIO_PULLUP_DISABLE, // 禁止上拉.pull_