LCD屏入门(基于ESP-IDF、SPI屏)

主要参考资料:
ESP32-S3 开发 SPI 屏【DIY 智能手表】: https://www.bilibili.com/video/BV1Yc411y7bb/?spm_id_from=333.337.search-card.all.click&vd_source=dd284033cd0c4d1f3f59a2cd40ae4ef9
使用 SPI 屏和 I2C 触屏运行 SquareLine Studio 提供的手表 UI 示例: https://gitee.com/esp-friends/lcd_touch
B站【乐鑫全球开发者大会】DevCon23 #17 |HMI 智能屏解决方案

1. 简介

MCU常用的驱动接口在下面,大致可以划分为串口屏和并口屏。
串口屏相较于并行屏优势是占用IO少,相应地数据传输带宽也低。
SPI有标准SPI和QSPI之分,具体可以看链接: https://blog.csdn.net/wangguchao/article/details/105593303

在这里插入图片描述

2. 硬件层接线

对于 SPI/I80接口,命令和颜色数据使用同一个接口。
在这里插入图片描述
在这里插入图片描述

3. 软件层

为了便于封装接口,习惯上会将屏幕代码分为三个层级:SDK层、驱动层和APP层。
在这里插入图片描述

3.1 SDK层component模块

在SDK层中封装了对 IO配置 和 总线配置的接口。已经作为components在ESP-IDF中。
比如触摸芯片cst816,在乐鑫组件库中搜索
在这里插入图片描述
在idf_component.yml中添加依赖
或者使用命令行idf.py add-dependency “espressif/esp_lcd_touch_cst816s^1.0.3~1”
在这里插入图片描述

3.2 确认驱动兼容性

3.3 配置端口层(SPI屏幕和触摸)

3.3.1 LCD的初始化

  • SPI总线配置
/* =============== Initialize SPI bus =============== */
    ESP_LOGI(TAG, "Initialize SPI bus");

    const spi_bus_config_t buscfg = ILI9341_PANEL_BUS_SPI_CONFIG(EXAMPLE_PIN_NUM_LCD_PCLK, EXAMPLE_PIN_NUM_LCD_DATA0,
                                    EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES * sizeof(uint16_t));
    ESP_ERROR_CHECK(spi_bus_initialize(EXAMPLE_LCD_HOST, &buscfg, SPI_DMA_CH_AUTO));
  • IO配置
/* =============== Install panel IO =============== */
    ESP_LOGI(TAG, "Install panel IO");

    esp_lcd_panel_io_handle_t io_handle = NULL;
    const esp_lcd_panel_io_spi_config_t io_config = ILI9341_PANEL_IO_SPI_CONFIG(EXAMPLE_PIN_NUM_LCD_CS, EXAMPLE_PIN_NUM_LCD_DC,
            example_notify_lvgl_flush_ready, &disp_drv);

    /* Attach the LCD to the SPI bus */
    ESP_ERROR_CHECK(esp_lcd_new_panel_io_spi((esp_lcd_spi_bus_handle_t)EXAMPLE_LCD_HOST, &io_config, &io_handle));
  • 安装LCD驱动
 /* =============== Install ili9341 panel driver =============== */
    ESP_LOGI(TAG, "Install ili9341 panel driver");

    esp_lcd_panel_handle_t panel_handle = NULL;
    ili9341_vendor_config_t vendor_config = {
        .init_cmds      = lcd_init_cmds,
        .init_cmds_size = sizeof(lcd_init_cmds) / sizeof(ili9341_lcd_init_cmd_t),
    };
    const esp_lcd_panel_dev_config_t panel_config = {
        .reset_gpio_num = EXAMPLE_PIN_NUM_LCD_RST,
        .rgb_endian     = LCD_RGB_ENDIAN_RGB,
        .bits_per_pixel = EXAMPLE_LCD_BIT_PER_PIXEL,
        .vendor_config  = &vendor_config, 
    };
    ESP_ERROR_CHECK(esp_lcd_new_panel_ili9341(io_handle, &panel_config, &panel_handle));
    ESP_ERROR_CHECK(esp_lcd_panel_reset(panel_handle));
    ESP_ERROR_CHECK(esp_lcd_panel_init(panel_handle));
    ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_handle, true));

3.3.2 输入设备的初始化

安装触摸端口

3.4 配置LVGL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值