当前位置: 首页 > news >正文

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. 简介
  • 2. 硬件层接线
  • 3. 软件层
    • 3.1 SDK层component模块
    • 3.2 确认驱动兼容性
    • 3.3 配置端口层(SPI屏幕和触摸)
      • 3.3.1 LCD的初始化
      • 3.3.2 输入设备的初始化
    • 3.4 配置LVGL

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


http://www.mrgr.cn/news/44253.html

相关文章:

  • D29【python 接口自动化学习】- python基础之输入输出与文件操作
  • 菜鸟笔记004 获取目标对象的渐变颜色值
  • LeetCode讲解篇之139. 单词拆分
  • 设计模式之装饰器模式(Decorator)
  • history的pushState/replaceState理解
  • vSAN05:vSAN延伸集群简介与创建、资源要求与计算、高级功能配置、维护、故障处理
  • 突触可塑性与STDP:神经网络中的自我调整机制
  • 电子信息类专业技术学习及比赛路线总结(大一到大三)
  • LeetCode hot100---栈专题(C++语言)
  • 10月5日刷题记录
  • 数据结构与算法篇(树 - 常见术语)
  • vue.js组建开发
  • 数据结构与算法篇(图)(持续更新迭代)
  • 【LeetCode-热题100-128题】官方题解好像有误
  • 【重学 MySQL】五十八、文本字符串(包括 enum set)类型
  • 如 有 任 何 问 题 ,请 及 时 联 系 我 们 反 馈 !
  • 一个值得关注的3D生成新算法:速度和图像生成平齐,能生成合理的展开贴图和高质量mesh
  • 19年408数据结构
  • 【Blender Python】3.使用For循环和列表批量创建立方体
  • 重磅来袭!CMSIS-DAP 脱机烧录器 EasyFlasher 发布~