2. 屏幕驱动适配

任务目标

在ESP32-S3开发板上适配一款基于ILI9341控制器的SPI接口TFT屏幕(分辨率240×320),完成驱动初始化、分辨率与RGB565色彩格式配置,并输出基本显示验证(清屏与色块填充)。

硬件与依赖

  • ESP32-S3-DevKitC-1开发板
  • ILI9341 SPI屏幕模块(240×320)
  • 接线:屏幕VCC→3.3V,GND→GND,CS→GPIO10,DC→GPIO9,RST→GPIO8,SCLK→GPIO12,MOSI→GPIO11,LED背光→3.3V(或经限流电阻)
  • Arduino-ESP32核心库(含SPI与Adafruit_GFX/Adafruit_ILI9341库)

关键实现

以下代码使用Adafruit_ILI9341库完成驱动适配。核心配置点为SPI引脚映射、屏幕尺寸与色彩格式。ILI9341原生支持RGB565,通过库构造函数传入宽高即可自动匹配。

#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <SPI.h>

// SPI引脚定义(ESP32-S3)
#define TFT_CS   10
#define TFT_DC   9
#define TFT_RST  8
#define TFT_SCLK 12
#define TFT_MOSI 11

// 创建屏幕对象:分辨率240x320,色彩格式RGB565(库默认)
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);

void setup() {
  Serial.begin(115200);
  
  // 初始化SPI总线(指定引脚)
  SPI.begin(TFT_SCLK, -1, TFT_MOSI, TFT_CS);
  
  // 初始化屏幕
  tft.begin();
  
  // 关闭旋转(竖屏原生方向)
  tft.setRotation(0);
  
  // 验证1:清屏为黑色
  tft.fillScreen(ILI9341_BLACK);
  delay(100);
  
  // 验证2:填充三个色块
  tft.fillRect(0, 0, 240, 80, ILI9341_RED);
  tft.fillRect(0, 80, 240, 80, ILI9341_GREEN);
  tft.fillRect(0, 160, 240, 80, ILI9341_BLUE);
  
  Serial.println("ILI9341 init OK, 240x320 RGB565");
}

void loop() {
  // 无需循环操作
}

编译与烧录

  1. 在Arduino IDE中安装Adafruit GFX Library与Adafruit ILI9341库(库管理器搜索安装)。
  2. 开发板选择ESP32S3 Dev Module,USB CDC启用可选。
  3. 按上述引脚接线后,直接编译上传。

验证方法与通过标准

  • 观察现象:上电后屏幕先全黑约100ms,随后从上到下依次显示红、绿、蓝三个水平色块,各占80像素高度。
  • 串口输出:打开串口监视器(115200波特率),应看到ILI9341 init OK, 240x320 RGB565。
  • 判定通过:屏幕颜色顺序正确且无花屏、错位、闪烁,串口信息正常打印,即表示SPI通信、分辨率与RGB565色彩格式适配成功。

常见问题

  • 白屏无显示:检查RST引脚是否接对,部分模块需将RST接GPIO或手动复位;确认背光引脚已接高电平。
  • 颜色错乱或花屏:多为MOSI/SCLK接反或SPI速率过高,可在tft.begin()前加SPI.setFrequency(40000000)降速测试。
  • 显示方向不对:修改setRotation()参数(0~3)可切换四个方向。