Overview

The ST7789 (and variants ST7789V / ST7789VI) is a single-chip controller/driver for 262,144-color graphic TFT-LCD displays manufactured by Sitronix. Designed for mobile, wearable, and smart home IoT interfaces, it incorporates an internal frame buffer (240×320×18-bit240 \times 320 \times 18\text{-bit} RAM) and drives high-density IPS color display panels over a fast 4-wire SPI bus supporting clock rates up to 62.5 MHz.

Popular breakout modules feature square 240×240240 \times 240 (1.3" / 1.54") or rectangular 240×320240 \times 320 (2.0" / 2.4") IPS screens offering vivid color saturation and wide viewing angles for ESP32, Raspberry Pi, and Arduino UI applications.

Quick reference

Operating voltage (VCC)3.3 V to 5.0 V DC (module with onboard regulator)
IC logic voltage (VDD)2.4 V to 3.3 V DC (3.3 V nominal)
Native resolution240×320240 \times 320 pixels (modules commonly crop to 240×240240 \times 240)
Color depth16-bit RGB565 (65,536 colors) or 18-bit RGB666
Interface4-Wire SPI (SPI Mode 3 or Mode 0)
Max SPI clockUp to 62.5 MHz (write)
Backlight controlDedicated BLK / LED pin (PWM dimmable)

Pinout

Common 7-pin or 8-pin 0.1" (2.54 mm) breakout module header:

PinNameTypeDescription
1GNDPowerGround (0 V)
2VCCPowerPower supply (+3.3 V to +5.0 V DC)
3SCL / SCKDigital InputSPI Serial Clock
4SDA / MOSIDigital InputSPI Master Out Slave In (Data Input)
5RES / RSTDigital InputActive-Low Hardware Reset
6DC / RSDigital InputData / Command Select (Low = Command, High = Data)
7CSDigital InputActive-Low Chip Select (tied low on some 7-pin modules)
8BLK / LEDADigital InputBacklight enable / PWM brightness control

Specifications

ParameterSymbolMinTypMaxUnitConditions
Supply Voltage (Module)VCCV_{CC}3.33.3 / 5.05.5VPower rail with 3.3V LDO
Logic Input HighVIHV_{IH}0.7 VDDV_{DD}3.33.6VSCL, SDA, DC, CS, RES
Logic Input LowVILV_{IL}-0.300.3 VDDV_{DD}VSCL, SDA, DC, CS, RES
Logic Driver CurrentIlogicI_{logic}815mAActive frame rendering
Backlight CurrentIledI_{led}4060mA100% LED brightness
Max SPI Write ClockfSCKf_{SCK}3062.5MHzVDD=3.3 VV_{DD} = 3.3\text{ V}
Operating TemperatureToprT_{opr}-3085°CAmbient

Register map

The ST7789 uses command bytes followed by data payloads over SPI (DC low for commands, DC high for data):

CommandNameAccessResetDescription
0x01SWRESETWriteSoftware Reset
0x11SLPOUTWriteSleep Out (exits low-power sleep)
0x29DISPONWriteDisplay On
0x2ACASETWriteColumn Address Set (XstartX_{start} to XendX_{end})
0x2BRASETWriteRow Address Set (YstartY_{start} to YendY_{end})
0x2CRAMWRWriteMemory Write (stream RGB pixel data)
0x36MADCTLWrite0x00Memory Data Access Control (rotation, BGR/RGB)
0x3ACOLMODWrite0x66Interface Pixel Format (0x55 = 16-bit RGB565)

Wiring

ST7789 PinESP32Arduino Uno (with level shifter)Notes
VCC3.3V / 5V5VOnboard LDO converts to 3.3V
GNDGNDGNDCommon ground
SCLGPIO 18 (SCK)D13Hardware SPI Clock
SDAGPIO 23 (MOSI)D11Hardware SPI Data
RESGPIO 4D8Hardware Reset
DCGPIO 2D9Data / Command Control
CSGPIO 5D10Chip Select (if present)
BLK3.3V5VPull High for 100% backlight
Warning

Logic level compatibility:

  • The ST7789 IC operates strictly at 3.3 V logic. While some breakout boards include a 3.3V voltage regulator for VCC, many cheaper modules do not include logic level shifters on SCL, SDA, DC, and CS.
  • Connecting 5 V logic directly from an Arduino Uno to an unbuffered ST7789 module will cause screen corruption or permanent IC damage. Use inline 1 kΩ1\text{ k}\Omega series resistors or a 74LVC245 buffer IC.

Example

cpp
#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>
#include <SPI.h>

#define TFT_CS    5
#define TFT_RST   4
#define TFT_DC    2

Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);

void setup() {
  Serial.begin(115200);
  
  // Initialize 240x240 ST7789 display
  tft.init(240, 240, SPI_MODE3);
  tft.setRotation(2);
  tft.fillScreen(ST77XX_BLACK);
  
  tft.setCursor(20, 100);
  tft.setTextColor(ST77XX_GREEN);
  tft.setTextSize(3);
  tft.println("VoltDocs");
}

void loop() {
  // Main execution loop
}

Common mistakes

  • Missing 240×240240 \times 240 offset alignment: On 240×240240 \times 240 displays, the physical screen is cropped from the ST7789's native 240×320240 \times 320 RAM array. Setting the wrong rotation offset causes a black band or glitchy pixels along the display edge. Use SPI_MODE3 and correct library offsets (offset_x = 0, offset_y = 0 or 32).
  • Color inversion (RGB vs BGR): ST7789 IPS displays default to inverted colors. If blacks appear white and blue appears yellow, call tft.invertDisplay(true) in setup.
  • Floating BLK pin: Leaving the backlight pin disconnected leaves the screen dark on modules that pull BLK Low by default.

Notes

  • ST7789 vs ST7735: ST7789 offers much higher pixel density (240×240240 \times 240 vs 128×160128 \times 160), faster SPI fill rates, and superior IPS viewing angles compared to older ST7735 TN displays.

Assets & downloads