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
}
반응형