Git Product home page Git Product logo

st7789-rgb's Introduction

ST7789-RGB

Library designed to initialize displays with a ST7789 driver using RGB interface. Tested on ST7789V / ST7789VW.

Checkout the datasheet for detailed information about all registers address and pin setup.

Pin Configuration

Interface Selection

First of all, we should select the 4-line 8bit serial Interface I, seting IM pins accordingly:

IM3 IM2 IM1 IM0
0 1 1 0

LTDC Configuration

This library was tested using LTDC display driver from STMicroelectronics, available on some STM32 families, alongside a TouchGFX project to design screens and drive.

We have to configure the LTDC parameters based on the driver's datasheet. The LTDC clock must be around 17 MHz for this parameters work, otherwise you will need to calculate based on datasheet's page 114.

Parameter Value
Horizontal Sync Width 30 pixels
Horizontal Backporch 30 pixels
Active Width* 240 pixels
Horizontal Frontporch 60 pixels
Vertical Sync Width 4 lines
Vertial Backporch 4 lines
Active Heigth* 320 pixels
Vertical Frontporch 8 lines

* you should fill active width and heigth with the size of your own display

Signal Polarity Value
Horizontal Sync Polarity Active Low
Vertical Sync Polarity Active Low
Not Data Enable Polarity Polarity Active Low
Pixel Clock Polarity Normal Input

Also, connect data pins D0 - D17 to the MCU:

ST7789 Pin D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15 D16 D17
LTDC Pin N/C B0 B1 B2 B3 B4 G1 G2 G3 G4 G5 N/C R0 R1 R2 R3 R4 R5

This table shows the connection for RGB565 (16 bits) interface. If you want to use RGB666 (18 bits), just connect them all in order.

Finally, connect VSYNC, HSYNC, ENABLE and DOTCLK to respective LTDC signals.

SPI Configuration

For the initialization routine we will use SPI on Half-Duplex Master Mode, 8-bit data size, MSB first, CPOL Low, CPHA 1 Edge. The baudrate tested was 42.5 MBits/s, but it should work with lower values.

Pinout:

ST7789 Pin MCU
SDA SPI_MOSI
DCX SPI_CLK
CSX Any GPIO pin
WRX Any GPIO pin

Both CSX and WRX will be controlled via software.

Connect RDX to VDD or GND, since it will not be used (only used by 8080 interface), and let SDO open.

Finally, connect RESX to a GPIO pin because it will also be controlled via software.

Library Configuration

Configure your display dimensions on st7789v.h.

#define ST7789_LCD_WIDTH     240
#define ST7789_LCD_HEIGHT    320

You will need to implement some auxiliary functions externally, used to write commands and data to the display.

extern void     LCD_IO_Init(void);                                  // SPI bus init and LCD RESX pin toggle
extern void     LCD_IO_WriteCommand(uint8_t command);               // SPI write command
extern void     LCD_IO_WriteData(uint8_t *data, uint8_t length);    // SPI write data
extern uint16_t LCD_IO_ReadData(void);                              // SPI read data
extern void     LCD_IO_Delay(uint32_t delay);                       // Basic MCU delay

LCD_IO_Init

/**
 * @brief Initializes display SPI bus and toggles RESX for hardware reset.
 * 
 */
void LCD_IO_Init(void) {
  //* CSX pin  toggle
  CS_IDLE();         // Set CS pin HIGH
  LCD_IO_Delay(20);  // Reset pulse time
  CS_ACTIVE();       // Set CS pin LOW
  LCD_IO_Delay(20);  // Reset pulse time

  //* RESX pin routine
  RESX_IDLE();      // Set RESX pin HIGH
  LCD_IO_Delay(50); // Reset pulse time
  RESX_ACTIVE();    // Set RESX pin LOW
  LCD_IO_Delay(50); // Reset pulse time
  RESX_IDLE();      // Set RESX pin HIGH
  LCD_IO_Delay(50); // Reset pulse time
}

LCD_IO_WriteCommand

/**
  * @brief  Writes to the display using D/CX pin, selecting Command option.
  */
void LCD_IO_WriteCommand(uint8_t command) {
  DC_COMMAND();   // Set WRX pin LOW to indicate Command
  CS_ACTIVE();    // Set CS pin LOW
  
  // SPI 1-byte transmission example, change this to your SPI transmit function
  HAL_SPI_Transmit(&hspi4, &command, 1, 500);
  
  CS_IDLE();      // Set CS pin HIGH
}

LCD_IO_WriteData

/**
  * @brief  Writes to the display using D/CX pin, selecting Data option.
  * 
  */
void LCD_IO_WriteData(uint8_t *data, uint8_t length) {
  if (length > 0) {
    DC_DATA();      // Set WRX pin HIGH to indicate Data
    CS_ACTIVE();    // Set CS pin LOW
    
    // SPI 1-byte transmission example, change this to your SPI transmit function
    HAL_SPI_Transmit(&hspi4, data, length, 500);
  }

  CS_IDLE();        // Set CS pin HIGH
}

LCD_IO_Delay

/**
  * @brief  Simple MCU delay in ms.
  * @param  Delay in ms.
  */
void LCD_IO_Delay(uint32_t Delay) {
  HAL_Delay(Delay);  // MCU Delay function
}

LCD_IO_ReadData

To Do

Using

Now, all you need to do is call st7789_Init() to send initialization parameters to the display and initialize your LTDC interface and let it deal with sending data to the display. Luckily, TouchGFX does this automatically on the background for you ๐Ÿ˜‰

st7789-rgb's People

Contributors

freitas-renato avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.