You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32调用SD.begin等外部函数后TFT-LCD指令无响应问题咨询

ESP32 ILI9341屏SD初始化后显示失效问题

项目基础配置

  • 主控:ESP32
  • 外设:搭载ILI9341控制器的2.8英寸SPI接口TFT-LCD(板载SD卡插槽)、配套采集传感器
  • 开发环境:Arduino IDE,可直接调用开源驱动库与官方文档资源
  • 开发目标:实现数据记录仪功能

故障现象

  • SD卡初始化执行前,TFT显示功能完全正常
  • 执行SD.begin()完成SD卡启动(或调用其他外部库函数)后,所有发送给TFT的控制指令均无响应,屏幕无对应输出

复现代码

// 引入依赖库
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <SD.h>

// ESP32引脚定义
#define TFT_CS 15
#define TFT_RST 0
#define TFT_DC 2
#define TFT_MOSI 23
#define TFT_CLK 18
#define TFT_MISO 19

// 初始化TFT驱动实例
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);

void setup() {
  Serial.begin(115200);
  
  tft.begin();
  tft.fillScreen(ILI9341_BLACK);
  // 此处屏幕正常显示蓝色圆形
  tft.drawCircle(100,100, 20, ILI9341_BLUE);

  // 启动SD卡,初始化成功后绘制红色圆形
  if(SD.begin()){
    tft.drawCircle(100,200, 20, ILI9341_RED);
    Serial.print("red circle");
    // 串口可正常打印red circle日志,但屏幕无红色圆形,仅保留之前的蓝色圆形
  }
}

void loop() {
}

实际运行验证结果

  • SD初始化前,屏幕正常显示绘制的蓝色圆形
  • SD.begin()执行成功后,串口可正常输出打印日志,但屏幕未绘制预期的红色圆形,仅保留之前的蓝色圆形
  • 对照测试:手动设置标志位执行绘图逻辑功能正常,仅调用SD.begin()这类外部库函数时会出现TFT指令无响应的问题

问题根因

故障本质是共享SPI总线的片选管理与配置冲突:

  1. TFT与板载SD卡共用同一组SPI硬件总线,SPI协议要求同一时间只能选中一个从设备(对应设备的CS片选引脚拉低),其余从设备CS引脚必须保持高电平,否则会出现总线数据冲突,从设备无法正确接收指令。
  2. 代码中调用SD.begin()时未传入SD卡对应的CS引脚参数,Arduino ESP32核心的SD库会自动使用默认CS引脚配置,初始化过程中会修改SPI总线的时钟、传输模式参数,同时可能错误配置片选引脚电平状态,导致后续TFT通信时CS引脚未被正确拉低,TFT控制器无法接收总线上的指令。
  3. SD库初始化完成后不会主动恢复SPI总线为TFT适配的配置参数,Adafruit_ILI9341库如果没有开启每次传输前自动重配SPI的选项,就会出现指令发送无效的问题。

修复方案

  • 先核对硬件连线,确认板载SD卡插槽的CS引脚实际连接的ESP32 GPIO编号(常见集成SD卡槽的ILI9341模块SD_CS默认接GPIO4,注意不要和TFT的CS、DC、RST引脚复用)
  • 调用SD.begin()时显式传入SD卡的CS引脚号,例如SD_CS接GPIO4时写为SD.begin(4),禁止使用无参的SD.begin()
  • 若上述修改后仍存在冲突,可在每次操作SD卡结束、需要操作TFT前调用tft.startWrite()显式选中TFT、重载SPI配置,TFT操作完成后调用tft.endWrite()释放SPI总线控制权,避免总线冲突。

内容的提问来源于stack exchange,提问作者Elchnasensteak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 23:15:59