ESP32 ESP-IDF TFT-LCD(ST7735 128x160)自定义组件驱动显示

ESP32 ESP-IDF TFT-LCD(ST7735 128x160)自定义组件驱动显示


  • 🌿驱动参考来源:https://blog.csdn.net/weixin_59250390/article/details/142691848
  • 📍个人相关驱动内容文章:《ESP32 ESP-IDF TFT-LCD(ST7735 128x160) LVGL基本配置和使用》
  • 🔖ESPIDF版本:v5.4

✨个人在使用上面的驱动代码驱动时,直接放在工程目录下面使用没有问题,在将驱动文件作为组件形式放置到组件里面使用时,调用遇到了一些问题,为了避免其他使用者踩同样的坑,特此记录一下。

🔰components文件夹和managed_components文件夹差异

在espidf项目中, components文件夹和managed_components文件夹都是用来存放组件的。它们之间的使用差异如下:

1. 组件内容差异
  • components文件夹
    存放用户自定义或项目本地组件,例如:
  • 用户自行开发的驱动程序(如LCD显示屏驱动、传感器驱动等);
  • 从其他项目手动拷贝的第三方组件(如ESP-IoT-Solution中的部分组件);
  • 通过VSCode命令(如idf.py create-component)生成的组件模板
    managed_components文件夹
    存放通过组件管理器(Component Manager)自动下载的组件,例如:
  • 官方注册表(ESP Component Registry)中的组件(如espressif/button、lvgl/lvgl);
  • 第三方发布的依赖库(需通过idf.py add-dependency命令添加)
2. 管理方式
  • components文件夹
    • 手动管理:需用户自行编写代码、配置CMakeLists.txt 文件(声明依赖、头文件路径等);
    • 路径优先级高:项目会优先搜索components中的组件,其次才是ESP-IDF内置组件。
  • managed_components文件夹
    • 自动管理:通过idf.py add-dependency命令添加依赖后,IDF工具会自动下载组件并更新dependencies.lock 文件;
    • 禁止手动修改:该文件夹内容由组件管理器维护,用户仅需调用接口,无需修改文件。
3. 构建流程差异
  • components
    需在CMakeLists.txt 中显式配置路径和依赖(如INCLUDE_DIRS、REQUIRES)
  • managed_components
    构建时自动解析idf_component.yml 清单文件,并递归处理依赖关系,无需手动配置。
    在这里插入图片描述

📗自定义组件创建方法

  • ✨个人自定义的组件使用自定义组件生成。不要自己在项目中自己创建managed_components形式来加载组件,不然会在后的项目编译过程中,可能会遇到各种问题。
  • 从VSCode 设置菜单-命令面板(Crtrl +Shift +P),来创建ESPIDF项目中的自定义组件。
    在这里插入图片描述
  • 输入想要创建的组件名称。
    在这里插入图片描述
  • 组件被创建后,项目目录下会自动生成下面框选内容:(包含组件文件夹以及下面的include文件夹以及cmakelist.txt文件)
    在这里插入图片描述
  • 放置驱动源文件以及头文件到组件目录对应位置。
    在这里插入图片描述
  • 🌿组件目录下的cmakelist.txt文件内容填写:
idf_component_register(SRCS "lib_lcd7735.c"INCLUDE_DIRS "include"PRIV_REQUIRES driver )
  • 🌿main文件目录下的cmakelist.txt文件填写:
set(srcs "hello_world_main.c")
idf_component_register(SRCS ${srcs}PRIV_REQUIRES spi_flash driverREQUIRES lib_lcd7735INCLUDE_DIRS "")

📘SPI参数配置

  • ⚡通讯设备时钟频率可以设置到30MHz,但是设置为40MHz就无法显示了,但是在使用上面的LVGL内容中,所使用设备通讯时钟频率为40MHz,驱动显示没有问题。
  • 屏幕驱动显示仅涉及到数据到ST7735屏幕中。如果挂载有多路SPI设备,需要使用读SPI设备数据操作,保证通讯质量,则通讯频率可能低于10MHz.
/*** @brief spi gpio初始化* @note  可修改适配自己不同的硬件*/
void LcdGpioSpiInit(void)
{//--gpio 配置 add your codegpio_config_t lcd_io = {.intr_type = GPIO_INTR_DISABLE,.mode = GPIO_MODE_OUTPUT,.pin_bit_mask = (1 << LCD_PIN_RES),	///<RES GPIO.pull_down_en = GPIO_PULLDOWN_DISABLE,.pull_up_en	= GPIO_PULLUP_ENABLE,};gpio_config(&lcd_io);
#if !(LCD_HARDWARE_CS)					///<CS GPIOlcd_io.pin_bit_mask = (1 << LCD_PIN_CS);gpio_config(&lcd_io);
#endiflcd_io.pin_bit_mask = (1 << LCD_PIN_A0);	//A0 GPIOgpio_config(&lcd_io);//总线配置  add your codespi_bus_config_t buscfg = {.miso_io_num = -1,   			///<gpio12->miso.mosi_io_num = LCD_PIN_SDA,    	///<gpio13->mosi.sclk_io_num = LCD_PIN_SCL    	///<gpio14-> sclk};buscfg.max_transfer_sz = 12800; 		///<设置传输数据的最大值。非DMA最大64bytes,DMA最大4096bytes:40 * sizeof(uint8_t)//buscfg.intr_flags = 0;  							///<这个用于设置SPI通讯中相关的中断函数的中断优先级,0是默认。esp_err_t tft_spi_f = spi_bus_initialize(LCD_SPI_HOST, &buscfg, SPI_DMA_CH_AUTO);		///<总线初始化,并且使用DMA传输if (tft_spi_f != ESP_OK) {printf("--tft--spi--bus--initialize--err,%d\n", tft_spi_f);						///<错误信息打印}//设备配置结构体 add your codespi_device_interface_config_t interface_config = {.address_bits = 0,.command_bits = 0,.clock_speed_hz = 30 * 1000 * 1000,.mode = LCD_SPI_MODE, 				///<设置SPI通讯的相位特性和采样边沿。包括了mode0-3四种。要看从设备能够使用哪种模式
#if LCD_HARDWARE_CS						///<宏选择硬件CS///传输前线片选 几个时钟再传数据不然容易失败// .cs_ena_pretrans = 2,// .cs_ena_posttrans = 2,.spics_io_num = -1,	//LCD_PIN_CS,			///<配置片选线
#endif.pre_cb=NULL,.post_cb=NULL,//NULL.duty_cycle_pos = 0,.queue_size = 6 					///<传输队列的长度,表示可以在通讯的时候挂起多少个spi通讯。在中断通讯模式的时候会把当前spi通讯进程挂起到队列中};tft_spi_f = spi_bus_add_device(LCD_SPI_HOST, &interface_config, &tft_hspi);		///<添加spi设备if (tft_spi_f != ESP_OK) {printf("--tft--spi--deiver--config--err,%d\n", tft_spi_f);					///<错误信息打印}
}
  • ESP32 SPI引脚和接口
//HSPI
// #define LCD_PIN_CS      GPIO_NUM_15         ///< 片选
// #define LCD_PIN_RES     GPIO_NUM_2          ///< 复位
// #define LCD_PIN_A0      GPIO_NUM_3          ///< 命令/数据
// #define LCD_PIN_SDA     GPIO_NUM_13         ///< MOSI
// #define LCD_PIN_SCL     GPIO_NUM_14         ///< spi CLK
//VSPI
#define LCD_PIN_CS      GPIO_NUM_5         ///< 片选
#define LCD_PIN_RES     GPIO_NUM_22          ///< 复位
#define LCD_PIN_A0      GPIO_NUM_21          ///< 命令/数据 DC
#define LCD_PIN_SDA     GPIO_NUM_23         ///< MOSI
#define LCD_PIN_SCL     GPIO_NUM_18         ///< spi CLK
📚工程源码
通过网盘分享的文件:lcd_st7735.rar
链接: https://pan.baidu.com/s/1h-D51el39i2jhQ1joDfFpA?pwd=65ia 提取码: 65ia

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/20170.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis的简单使用

1.Redis的安装Ubuntu安装Redis-CSDN博客 2.Redis在Spring Boot 3 下的使用 2.1 pom.xml <!-- Redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifac…

elabradio入门第四讲——位同步(符号同步)

位同步是数字通信系统中特有的一种同步技术&#xff0c;又称为码元同步。在数字通信系统中&#xff0c;任何消息都是一串信号码元序列&#xff0c;接收端为了恢复码元序列&#xff0c;则需要知道每个码元的起止时刻&#xff0c;以便对于解调后的信号进行抽样判决&#xff0c;这…

网络安全推荐的视频教程 网络安全系列

第一章 网络安全概述 1.2.1 网络安全概念P4 网络安全是指网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然的或恶意的原因而遭到破坏、更改、泄露&#xff0c;系统连续可靠正常地运行&#xff0c;网络服务不中断。 1.2.3 网络安全的种类P5 &#xff08;1…

工控网络安全介绍 工控网络安全知识题目

31.PDR模型与访问控制的主要区别(A) A、PDR把对象看作一个整体 B、PDR作为系统保护的第一道防线 C、PDR采用定性评估与定量评估相结合 D、PDR的关键因素是人 32.信息安全中PDR模型的关键因素是(A) A、人 B、技术 C、模型 D、客体 33.计算机网络最早出现在哪个年代(B) A、20世…

Golang学习笔记_33——桥接模式

Golang学习笔记_30——建造者模式 Golang学习笔记_31——原型模式 Golang学习笔记_32——适配器模式 文章目录 桥接模式详解一、桥接模式核心概念1. 定义2. 解决的问题3. 核心角色4. 类图 二、桥接模式的特点三、适用场景1. 多维度变化2. 跨平台开发3. 动态切换实现 四、与其他…

DeepSeek预测25考研分数线

25考研分数马上要出了。 目前&#xff0c;多所大学已经陆续给出了分数查分时间&#xff0c;综合往年情况来看&#xff0c;每年的查分时间一般集中在2月底。 等待出成绩的日子&#xff0c;学子们的心情是万分焦急&#xff0c;小编用最近爆火的“活人感”十足的DeepSeek帮大家预…

AI性能极致体验:通过阿里云平台高效调用满血版DeepSeek-R1模型

前言 解决方案链接&#xff1a; https://www.aliyun.com/solution/tech-solution/deepseek-r1-for-platforms?utm_contentg_1000401616 DeepSeek是近期爆火的开源大语言模型&#xff08;LLM&#xff09;&#xff0c;凭借其强大的模型训练和推理能力&#xff0c;受到越来越多…

基于暗通道先验的图像去雾算法解析与实现

一、算法背景 何凯明团队于2009年提出的暗通道先验去雾算法《single image haze removal using dark channel prior》&#xff0c;通过统计发现&#xff1a;在无雾图像的局部区域中&#xff0c;至少存在一个颜色通道的像素值趋近于零。这一发现为图像去雾提供了重要的理论依据…

Visual Studio Code的下载安装与汉化

1.下载安装 Visual Studio Code的下载安装十分简单&#xff0c;在本电脑的应用商店直接下载安装----注意这是社区版-----一般社区版就足够用了---另外注意更改安装地址 2.下载插件 重启后就是中文版本了

遵循规则:利用大语言模型进行视频异常检测的推理

文章目录 速览摘要01 引言02 相关工作视频异常检测大语言模型 03 归纳3.1 视觉感知3.2 规则生成Normal and Anomaly &#xff08;正常与异常&#xff09;Abstract and Concrete &#xff08;抽象与具体&#xff09;Human and Environment &#xff08;人类与环境&#xff09; 3…

情书网源码 情书大全帝国cms7.5模板

源码介绍 帝国cms7.5仿《情书网》模板源码&#xff0c;同步生成带手机站带采集。适合改改做文学类的网站。 效果预览 源码获取 情书网源码 情书大全帝国cms7.5模板

【YOLOv8】

文章目录 1、yolov8 介绍2、创新点3、模型结构设计3.1、backbone3.2、head 4、正负样本匹配策略5、Loss6、Data Augmentation7、训练、推理8、分割 Demo附录——V1~V8附录——相关应用参考 1、yolov8 介绍 YOLOv8 是 ultralytics 公司在 2023 年 1 月 10 号开源的 YOLOv5 的下…

Softing线上研讨会 | 自研还是购买——用于自动化产品的工业以太网

| 线上研讨会时间&#xff1a;2025年1月27日 16:00~16:30 / 23:00~23:30 基于以太网的通信在工业自动化网络中的重要性日益增加。设备制造商正面临着一大挑战——如何快速、有效且经济地将工业以太网协议集成到其产品中。其中的关键问题包括&#xff1a;是否只需集成单一的工…

人工智能基础之数学基础:01高等数学基础

函数 极限 按照一定次数排列的一列数:“&#xff0c;“,…,"…&#xff0c;其中u 叫做通项。 对于数列{Un}如果当n无限增大时&#xff0c;其通项无限接近于一个常数A&#xff0c;则称该数列以A为极限或称数列收敛于A&#xff0c;否则称数列为发散&#xff0c; 极限值 左…

QT数据库(三):QSqlQuery使用

QSqlQuery 简介 QSqlQuery 是能运行任何 SQL 语句的类&#xff0c;如 SELECT、INSERT、UPDATE、DELETE 等 SQL 语句。所以使用 QSqlQuery 几乎能进行任何操作&#xff0c;例如创建数据表、修改数据表的字段定义、进行数据统计等。如果运行的是 SELECT 语句&#xff0c;它查询…

数据结构(考研)

线性表 顺序表 顺序表的静态分配 //线性表的元素类型为 ElemType//顺序表的静态分配 #define MaxSize10 typedef int ElemType; typedef struct{ElemType data[MaxSize];int length; }SqList;顺序表的动态分配 //顺序表的动态分配 #define InitSize 10 typedef struct{El…

Unity DeepSeek API 聊天接入教程(0基础教学)

Unity DeepSeek API 聊天接入教程(0基础教学) 1.DeepSeek 介绍 DeepSeek是杭州深度求索人工智能基础技术研究有限公司推出的一款大语言模型。2025年1月20日&#xff0c;DeepSeek-R1正式上线&#xff0c;和当前市面上的主流AI相比&#xff0c;它在仅有极少标注数据的情况下&am…

PAT乙级真题 — 1090 危险品装箱(java)

集装箱运输货物时&#xff0c;我们必须特别小心&#xff0c;不能把不相容的货物装在一只箱子里。比如氧化剂绝对不能跟易燃液体同箱&#xff0c;否则很容易造成爆炸。 本题给定一张不相容物品的清单&#xff0c;需要你检查每一张集装箱货品清单&#xff0c;判断它们是否能装在…

Navicat16安装教程(附安装包)2025最新版详细图文安装教程

文章目录 前言一、Navicat16安装包下载&#xff1f;二、安装步骤1.运行安装程序2.安装程序3.阅读许可协议4.选择安装位置5.选择附加任务6.准备安装7.完成安装8.使用设置 前言 Navicat 16 是一款好用的数据库管理软件&#xff0c;能让你轻松操作各类数据库。本教程会一步一步教…

论文阅读 DOES END-TO-END AUTONOMOUS DRIVING REALLY NEED PERCEPTION TASKS?

端到端的强势来袭&#xff0c;好久了~~~ 简单翻译&#xff1a;端到端真的需要感知任务嘛&#xff1f; code https://github.com/PeidongLi/SSR. https://arxiv.org/pdf/2409.18341 1. 摘要 端到端自动驾驶&#xff08;E2EAD&#xff09;方法通常依赖于监督式感知任务来提取显…