Q's ToyBox

「よQ」のおもちゃ箱

MENU

ST7789 CS無しLCDをM5Stack Atom S3で使ってみる

M5Stack Atom S3 Lite買ったった。

ST7789 240x240 TFTを使ってやろうとおもったら

AdafruitのST7789ライブラリを使ってはまったので備忘録に。

まずこのライブラリはHard SPIとSoft SPIを選べ、どちらかでTFTを制御する。

 

Hard SPIは書き込みスピードが速いが、SPIの端子が拘束され指定できない。

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

Soft SPIは自由に端子が選べるが、遅いしどうやらSPI MODE0固定ぽい。

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

それじゃAtom S3 Liteで使えないやない。

と思ったらSPIのオブジェクトを参照渡しする方法があるのに気づいた。

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

 

で、こうやったらできた。※tft.initの引数SPI_MODE3も必須ポイントです。

#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h>
 
#define TFT_CS -1
#define TFT_RST 7
#define TFT_DC 8
#define TFT_MISO -1
#define TFT_MOSI 6 // Data out
#define TFT_SCLK 5 // Clock out
SPIClass* spi0 = &SPI;
Adafruit_ST7789 tft = Adafruit_ST7789(spi0, TFT_CS, TFT_DC, TFT_RST);
 
void setup(void) {
SPI.begin(TFT_SCLK, TFT_MISO, TFT_MOSI, TFT_CS);
tft.init(240, 240, SPI_MODE3);
exampleのgraphictestにある
tft.fillScreen(ST77XX_BLACK);
黒塗り潰しに掛かる時間はHard SPIは41msec/Soft SPI(画はでないけど)は1383msecで
Hard SPIの圧勝!