「STM32F103C8T6(BluePill)」からSPI接続ディスプレイ(480x320、ILI9488)への表示を色々試してみました。やっと出来ましたので報告します。
1.ArduinoIDE 2.3.2
2.Generic STM32F1 series, BluePill F103CB(or C8 with 128k)
3.TFT_eSPIライブラリ
4.3.5" TFT SPI 480x320 V1.0 ILI9488
5.ST-LINK V2 (ミニ 互換プログラマ)
スマホの不鮮明な写真でごめんなさい。
ArduinoIDE -> File -> Examples -> TFT_eSPI -> 480x320 -> UTFT_Demo_480x320.ino
と自作テトリス風ゲーム
ArduinoIDE、TFT_eSPIライブラリ、 TENOROS.ino
の動作状況です。
ここに至るまで様々試すものの全く白い画面しか出て来ず、「ArduinoIDE」と「STM32CubeIDE」の間を何度も行ったり来たりしてプログラミングしました。最後、既に「ESP32」と「TFT_eSPIライブラリ」で動いていた自作テトリス風ゲームを動かしてみました。やはりの白画面でしたが、眺めていると時々ゴミのようなものが表示されることに気が付きました。ひょっとしてこれはと、設定を見直しました。そしてSPIの周波数の問題ではないかと。TFT_eSPIライブラリの「User_Setup.h」の記述で周波数を下げてみたら動作画面が現れました。気付けば当然のことですが知らずにどれだけ頭を悩ませたことか。実はそれだけではありません。もっと重要な点がありました。「ST-LINK」の存在です。これが無ければ動かなかったのです。どういうことかと言いますと、PC(or電源)、STM32F103C8T6(BluePill)とST-LINKの接続が
.――――――――.
PC(電源) -----|BluePill|----(SWD)----|ST-LINK| (ST-LINKとPCの接続は必要なし)
'――――――――'
のようでないと画面表示されないのです。つまり、動作中は不要なはず(PCに繋がれていないから)のST-LINKがBluePillにSWDで繋がったままであることが必要なのです。理由は不明ですが、ST-LINKを使ってなければ気付かなかったでしょう。以下に「User_Setup.h」の有効とした個所のみ示します。
#define USER_SETUP_INFO "User_Setup"
#define STM32
#define ILI9488_DRIVER
#define TFT_SPI_PORT 1 // SPI port 1 maximum clock rate is 55MHz
#define TFT_MOSI PA7
#define TFT_MISO PA6
#define TFT_SCLK PA5
#define TFT_DC PA2 // Data Command control pin to TFT DC (may be labelled RS = Register Select)
#define TFT_RST PA3 // Reset pin to TFT RST (or RESET)
#define TFT_CS PA4 // Chip select control pin to TFT CS
#define TOUCH_CS PA1 // Chip select pin (T_CS) of touch screen
#define LOAD_GLCD // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
#define LOAD_FONT2 // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#define LOAD_FONT4 // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
#define LOAD_FONT6 // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
#define LOAD_FONT7 // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.
#define LOAD_FONT8 // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
//#define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT
#define LOAD_GFXFF // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts
#define SPI_FREQUENCY 27000000
#define SPI_READ_FREQUENCY 20000000
#define SPI_TOUCH_FREQUENCY 2000000
まだ課題はありまして、何とか表示は出来ましたがタッチ機能までは使えていません。
最後までご覧いただき有難うございました。