news 2026/2/22 2:39:04

ST7789上手实践:在Arduino平台实现屏幕点亮

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ST7789上手实践:在Arduino平台实现屏幕点亮

点亮第一帧:手把手教你用Arduino驱动ST7789彩屏

你有没有遇到过这种情况——买了一块炫酷的圆形TFT屏幕,插上Arduino却死活不亮?要么全黑、要么花屏、要么颜色发紫得像外星科技……别急,这几乎每个玩嵌入式显示的人都踩过的坑。

今天我们就来彻底解决这个问题。主角是现在最火的小尺寸彩屏驱动芯片:ST7789。它常见于1.3英寸240x240圆角屏、240x320矩形屏,被广泛用于智能手表、DIY掌机、WiFi配置界面等项目中。而我们的目标很明确:从零开始,让你在30分钟内成功点亮这块屏幕,并理解背后的工作原理


为什么是ST7789?

市面上的TFT驱动不少,比如老将ILI9341、OLED专用的SSD1306,但如果你最近买了新型小尺寸彩屏,大概率它的“心脏”就是ST7789。

为什么它这么受欢迎?三个字:小、快、省

  • :支持240x240这类紧凑分辨率,特别适合圆形或方形表盘设计;
  • :SPI最高可达60MHz,刷图流畅,动画不卡顿;
  • :内置升压电路,3.3V单电源供电就能点亮背光和LCD偏压,省掉额外DC-DC模块。

更重要的是,它和Arduino生态配合得天衣无缝,尤其是搭配 TFT_eSPI库 ,几行代码就能出图,堪称“嵌入式GUI入门神芯”。


硬件接线:别再接错5V了!

先说最重要的一点:ST7789是3.3V器件!

虽然有些模块自带电平转换,但很多便宜屏没做保护,直接接Arduino Uno的5V会烧毁芯片。所以请务必确认:

✅ VCC接3.3V
❌ 不要接5V!

以下是标准四线SPI模式下的引脚连接表(适用于大多数开发板):

ST7789引脚功能说明推荐连接(Arduino Uno/Nano)
VCC电源输入(3.3V)3.3V
GNDGND
SCL/SCKSPI时钟D13 或 SCK
SDA/SDI/MOSI数据输入D11 或 MOSI
CS片选D10(可自定义)
DC命令/数据选择D5(常用)
RES复位D4(建议固定)
BLK/LED背光控制3.3V(常亮)或PWM引脚调光

📌关键提示
- 如果使用ESP32,推荐使用硬件SPI并启用DMA以提升刷新速度。
-BLK脚如果不接,屏幕可能完全无光。想实现亮度调节?把它接到PWM引脚(如D9),用analogWrite()控制。


软件准备:选对库事半功倍

Arduino平台上有两个主流图形库:

  1. Adafruit_GFX + Adafruit_ST7735
    兼容性好,学习资料多,但对ST7789支持较弱,初始化需手动调整。

  2. TFT_eSPI(强烈推荐)
    专为高速TFT优化,原生支持ST7789、多种分辨率、旋转方向,性能强且配置灵活。

我们选第二个。安装方法很简单:

  1. 打开Arduino IDE → “工具” → “管理库”
  2. 搜索TFT_eSPI,安装Bodmer版本
  3. 安装完成后,进入库路径找到UserSetup.h

⚠️ 这一步很多人忽略,结果屏幕不亮——必须修改UserSetup.h中的配置!

打开文件后,取消注释对应屏幕型号的行,例如:

#define ST7789_DRIVER #define TFT_WIDTH 240 #define TFT_HEIGHT 240 #define CGRAM_OFFSET // 若显示偏移可用此宏修正

再设置引脚(以常见NodeMCU ESP-12模板为例):

#define TFT_MISO -1 // ST7789通常不用MISO #define TFT_MOSI 23 #define TFT_SCLK 18 #define TFT_CS 5 #define TFT_DC 2 #define TFT_RST 4

保存后重新编译上传即可生效。


第一个程序:让屏幕说话

现在终于可以写代码了。下面是一个完整的“Hello World”示例,包含清屏、文字、图形绘制:

#include <TFT_eSPI.h> TFT_eSPI tft = TFT_eSPI(); // 创建对象 void setup() { tft.init(); // 自动初始化 tft.setRotation(1); // 横屏显示(0~3可选) tft.fillScreen(TFT_BLACK); // 黑色背景 // 设置字体样式 tft.setTextColor(TFT_WHITE, TFT_BLACK); tft.setTextSize(2); tft.setCursor(30, 50); tft.println("Hello, ST7789!"); // 画个红圈和绿线 tft.drawCircle(120, 150, 40, TFT_RED); tft.drawLine(0, 0, 240, 240, TFT_GREEN); } void loop() { delay(1000); }

💡 小技巧:setRotation(1)是关键。不同外壳安装方向不同,这个函数会自动重映射坐标系,无需改硬件。

上传后如果一切正常,你会看到屏幕亮起,出现白色文字、红色圆圈和一条斜穿屏幕的绿线——恭喜,你的ST7789已经成功被征服!


屏幕为何不亮?深入初始化流程

但如果你还是黑屏,请不要怀疑人生。我们来拆解一下tft.init()背后到底发生了什么。

初始化的本质:发命令+等时序

ST7789不像OLED那样“即插即显”,它需要一系列精确的寄存器配置才能进入工作状态。整个过程就像给一台老式电视机“预热+调台”。

核心步骤如下:

  1. 复位芯片
    - 发送低电平持续一段时间(约10ms),模拟硬件复位
    - 或通过软件命令0x01触发内部复位

  2. 退出睡眠模式
    cpp writeCommand(0x11); // Sleep Out delay(120); // 必须等待至少120ms!这是坑王之王

  3. 设置色彩格式
    cpp writeCommand(0x3A); writeData(0x05); // RGB565格式(16位色)
    ⚠️ 错这里会导致紫色/粉色异常,因为默认可能是6-6-6模式。

  4. 电源与电压配置
    cpp writeCommand(0xC3); writeData(0x19); // VREG1L writeCommand(0xC4); writeData(0x20); // VREG2L writeCommand(0xBB); writeData(0x3B); // VCOM

  5. 开启显示
    cpp writeCommand(0x29); // Display ON

这些命令序列藏在TFT_eSPI的Init_ST7789.cpp里,一般不需要改动。但如果换了个冷门屏幕,可能需要根据厂商提供的初始化代码替换部分内容。

🔧调试建议
- 加长延时试试(如把120ms改成200ms)
- 用逻辑分析仪抓SPI信号,看是否发出正确指令
- 检查DC脚是否正确切换“命令/数据”状态


颜色怎么不对?GRAM与MADCTL详解

另一个常见问题是:“我画了个白点,怎么变成黄的?”或者“整个画面反了”。

这多半是GRAM访问方式出了问题。

GRAM是什么?

Graphic RAM(显存),是ST7789内部一块存储像素数据的区域。你要画的东西最终都要写进这里。写入前必须指定范围:

writeCommand(0x2A); // CASET: Column Address Set writeData(0x00); writeData(0x00); // 起始列 writeData(0x00); writeData(0xF0); // 结束列(240) writeCommand(0x2B); // RASET: Row Address Set writeData(0x00); writeData(0x00); writeData(0x01); writeData(0x40); // 行结束(320) writeCommand(0x2C); // RAMWR: Memory Write // 开始连续发送RGB565数据...

顺序不能错,否则地址错乱导致花屏。

MADCTL:旋转的秘密

你想横屏?竖屏?倒着装?靠的就是MADCTL寄存器(0x36)。

它有多个控制位,其中最重要的是:

名称功能
7MY行地址递增方向
6MX列地址递增方向
5MV行列交换(转置)
3ML扫描方向(从下往上)
2RGB接口颜色顺序

例如:
-0x00:正常竖屏
-0x70:横屏(右转90°)
-0xA0:上下翻转
-0xC0:180°旋转

TFT_eSPI的setRotation()会自动计算这些值,但如果你自己写底层驱动,就得亲自算bit。


实战避坑指南:那些年我们一起踩过的雷

🔴 问题1:屏幕一闪就灭

  • 原因:初始化太快,Sleep Out后没等够时间
  • 解决方案:确保delay(120)0x11之后

🟡 问题2:花屏、条纹、雪花

  • 原因:SPI速率过高或干扰
  • 解决方案:降低SPI频率(TFT_eSPI中修改TFT_FREQUENCY为20000000)

🟣 问题3:整体偏紫/发红

  • 原因:色彩格式错误
  • 解决方案:检查COLMOD (0x3A)是否设为0x05(RGB565)

🟢 问题4:触摸与显示错位

  • 原因:TFT旋转了,但触摸芯片(如XPT2046)没同步
  • 解决方案:在Touch library中也调用setRotation()

⚪ 问题5:背光不亮

  • 原因BLK脚悬空或接错
  • 解决方案:接到3.3V或PWM引脚;部分模块需拉高使能

更进一步:不只是“点亮”

一旦你能稳定驱动ST7789,接下来的可能性就打开了:

✅ 数据可视化仪表盘

drawArc()画弧形进度条,实时显示温度、湿度、电量。

✅ 图片显示(SPIFFS + .raw/.png解码)

将图片转成RGB565数组存入Flash,用tft.pushImage()播放。

✅ 简易UI框架

结合按钮检测、菜单导航,打造属于自己的HMI系统。

✅ 低功耗休眠唤醒

利用writeCommand(0x10)进入睡眠模式,外部中断唤醒,适合电池设备。

甚至有人用它做了:
- 复古贪吃蛇游戏机
- WiFi信号扫描仪
- BLE信标显示器
- 心率监测腕带


写在最后:从点亮到创造

点亮一块屏幕,看似只是显示几个字、几根线,但它代表的是你掌握了嵌入式GUI的第一道门槛:如何与复杂的外设通信,如何解读时序,如何调试底层协议。

ST7789不是一个简单的模块,它是现代小型化人机交互的核心组件之一。掌握它,意味着你可以自信地构建任何需要视觉反馈的项目。

下次当你看到一块小小的圆形彩屏时,不要再问“为什么我不亮”,而是思考:“我能用它表达什么?”

毕竟,真正的魔法不是让屏幕亮起来,而是让它说出你想说的话。


💬互动时间:你在驱动ST7789时遇到过哪些奇葩问题?是怎么解决的?欢迎在评论区分享你的“踩坑日记”!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/12 6:31:50

戴森球计划光子生产极限配置:5806锅盖接收站技术解析

戴森球计划光子生产极限配置&#xff1a;5806锅盖接收站技术解析 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints 在戴森球计划中&#xff0c;光子生产配置是决定游戏后期发…

作者头像 李华
网站建设 2026/2/21 18:39:49

zTree树形插件实用技巧:从配置到优化的高效开发方法

zTree树形插件实用技巧&#xff1a;从配置到优化的高效开发方法 【免费下载链接】zTree_v3 jQuery Tree Plugin 项目地址: https://gitcode.com/gh_mirrors/zt/zTree_v3 还在为树形结构开发发愁吗&#xff1f;zTree树形插件作为基于jQuery的高性能解决方案&#xff0c;能…

作者头像 李华
网站建设 2026/2/19 19:55:46

Res-Downloader终极指南:轻松获取全网多媒体资源

Res-Downloader终极指南&#xff1a;轻松获取全网多媒体资源 【免费下载链接】res-downloader 资源下载器、网络资源嗅探&#xff0c;支持微信视频号下载、网页抖音无水印下载、网页快手无水印视频下载、酷狗音乐下载等网络资源拦截下载! 项目地址: https://gitcode.com/GitH…

作者头像 李华
网站建设 2026/2/20 13:47:12

CosyVoice-300M Lite从零部署:轻量TTS服务搭建完整流程

CosyVoice-300M Lite从零部署&#xff1a;轻量TTS服务搭建完整流程 1. 引言 1.1 语音合成技术的轻量化趋势 随着边缘计算和终端智能设备的普及&#xff0c;对模型体积小、推理速度快、资源消耗低的轻量级AI服务需求日益增长。传统语音合成&#xff08;Text-to-Speech, TTS&a…

作者头像 李华
网站建设 2026/2/21 3:36:02

看完就想试!bge-large-zh-v1.5打造的智能问答效果展示

看完就想试&#xff01;bge-large-zh-v1.5打造的智能问答效果展示 1. 引言&#xff1a;为什么选择 bge-large-zh-v1.5&#xff1f; 在当前自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;语义理解能力已成为构建高质量智能问答系统的核心。传统的关键词匹配或浅层…

作者头像 李华
网站建设 2026/2/21 6:25:04

FST ITN-ZH保姆级教程:生产环境部署指南

FST ITN-ZH保姆级教程&#xff1a;生产环境部署指南 1. 简介与背景 中文逆文本标准化&#xff08;Inverse Text Normalization, ITN&#xff09;是语音识别、自然语言处理和智能对话系统中的关键预处理环节。其核心任务是将口语化或非标准表达的中文文本转换为规范化的书面格…

作者头像 李华