본문 바로가기

[ST_MICRO]/STM32G0

[STM32G0-SSM EVM] Arduino ST7789 TFT LCD 출력 테스트

 

 

Adafruit_ST7735_and_ST7789_Library 를 이용해서 SST7789 TFT LCD Module 을 RPI-SSM-EXP 보드에서 테스트 해보았다.

 

RPI-SSM-EXP 보드의 LCD는 SPI와 LCD_RS(J55-PIN5), LCD_EN(J56-PIN6)에 연결되어 있다.

 

 

 

STM32G0 SSM EVM  보드의 PA6, PC14에 연결해서 제어 하면된다.

 

 

ST7789 Arduino 라이브러리는 Adafruit ST7789 라이브러리를 사용했다.

 

초기화 코드에서 TFT LCD  제어용 핀맵 설정

#define TFT_CS        14 // Hallowing display control pins: chip select
#define TFT_RST       -1 // Display reset
#define TFT_DC        6 // Display data/command select
#define TFT_BACKLIGHT  7 // Display backlight pin

 

 

처음에 동작에 문제가 있었는데 STM32G0의 핀맵 설정을 다시 수정해 주었다.

const PinName digitalPin[] = {
	PA_0,	//0 SCLK
	PA_1,	//1 I2S_CK 2  
	PA_2,	//2 I2S_SD 3
	PA_3,	//3  MISO
	PA_4,	//4  MOSI
	PA_5,	//5   
	PA_6,	//6 I2S_MCK
	PA_7,	//7
	PB_0,	//8   
	PA_11,	//9 SCL
	PA_12,	//10 SDA
	PB_3,	//11  TXD  1
	PB_7,	//12 RXD  0
	PB_8,
	PC_14,	//14 SS
	PC_15,	//15 LED
	PB_9,		
	PC_14,
	PF_2,
};

 

 

기본코드를 조금 수정해서 테스트 해보았다.

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h>

// Because of the limited number of pins available on the Circuit Playground Boards
// Software SPI is used
#define TFT_CS        14
#define TFT_RST      -1
#define TFT_DC        6
#define TFT_BACKLIGHT 7 // Display backlight pin



// OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique
// to each board and not reassignable.
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);


float p = 3.1415926;

void setup(void) {
  Serial.begin(115200);
  Serial.print("Hello! ST77xx TFT Test");

  pinMode(LED_BUILTIN, OUTPUT);
  tft.init(240, 240);                // Init ST7789 240x240
  tft.setRotation(2);  

  tft.fillScreen(ST77XX_BLACK);  // fill screen with black color
  tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK);  // set text color to white and black background  tft.setTextColor(ILI9341_WHITE);
}


void mediabuttons() {
  // play
  tft.fillScreen(ST77XX_BLACK);
  tft.fillRoundRect(25, 10, 78, 60, 8, ST77XX_WHITE);
  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_RED);
  delay(500);
  // pause
  tft.fillRoundRect(25, 90, 78, 60, 8, ST77XX_WHITE);
  tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_GREEN);
  tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_GREEN);
  delay(500);
  // play color
  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_BLUE);
  delay(50);
  // pause color
  tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_RED);
  tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_RED);
  // play color
  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_GREEN);
}

int  gTimeS= 0;
void loop() {
  char _buffer[8];

#if 1
  gTimeS++;
  if(gTimeS>59)gTimeS=0;
  
  tft.setTextSize(4);
  tft.fillRect(40, 180, 160, 62, ST77XX_BLACK);
  
  sprintf( _buffer, "STM32G0 %03d", gTimeS);
  tft.setCursor(40, 180);
  tft.print(F(_buffer));
#endif


  delay(1000); 
  mediabuttons();
  delay(100);    // wait a second
}

 

 

반응형