3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

STM32F401でST7789液晶を使う

Posted at

#はじめに
ST7789を使用した240x240のIPS液晶モジュールが500円程で購入可能です。Arduinoではライブラリが容易されているようですがSTM32にはありません(自分が知らないだけかもですが)。今回STM32F401での駆動が出来ましたので、忘備録として記録しておきます。

image.pngimage.png

#ライブラリ
Floyd-Fish氏のST7789-STM32を使用します。

画像を表示するには16Bit(RGB565)でテキストデータを用意する必要があります。こちらはafiskon氏が公開されているstm32-st7735ライブラリに有るimage-to-mem.pyで作成する事が可能です。使用方法は(自分のメモのためにも)後述します。

#STM32F401の設定
STM32CubeMXで生成しています。
SPI1を使用しPA2-PA4にRST, DC, CS(未使用)を出力として設定しています。

##Pin out
image.png

##SPI1
SPIの通信設定はデフォルトですが、動作しない場合はPull-upにしてください。

image.png

##clock
最高速となるように設定しました。
image.png

#結線
今回使用した液晶にはCSピンがありません。そのため結線は不要ですがライブラリにCS結線のコードがあるためSTMではピンアサインを行なっておきます。
BLKはバックライトのON-OFF制御信号です。OpenでON、GNDでOFFとなるため、結線無しでOKです。画面On-OFFを制御したい場合はピンに接続します。

Pin connection
LCD Pin		STM32 pin			DESC.
GND			GND
VCC			3.3V
SCL			SPI1_SCK(PA5)		**MUST BE SOFT PULL UP
SPA			SPI1_MOSI(PA7)		**MUST BE SOFT PULL UP
RES			ST7789_RST(PA2)		Reset signal
DC			ST7789_DC(PA3)		DATA, command
BLK			No connection		Back light, float:ON, GND:OFF
CS			ST7789_CS(PA4)		CS in N/A. This is for software compatibility.

#コード
STM32CubeMXにてコード生成した後、Srcの下にst7789フォルダを作成し、4つのファイルをインポートします。実際の作業はエクスプローラでフォルダ毎コピーすればインポートされます。
includeパス等必要な部分を環境に合せて修正します。

image.png

##サンプル表示
main.cの下記部分を修正してサンプル表示をさせます。

###include
ヘッダーをIncludeします。

/* USER CODE BEGIN Includes */
#include "st7789\\st7789.h"
/* USER CODE END Includes */

###サンプルコード
Initializeして、テスト関数を呼びます。

  /* USER CODE BEGIN 2 */

  ST7789_Init();
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  ST7789_Test();
  }
  /* USER CODE END 3 */

###st7789.h
ご使用のTFTの解像度に対してヘッダーのこのへんを修正します。

image.png

#実行
コンパイルして実行します。表示できたら成功です。

#画像データの作成
image-to-mem.pyを使用して、16bitRGBの画像データを用意する方法を記載します。

##pythonソース
前述の通りこちらより入手します。stm32-st7735

##pythonソース修正
オリジナルは128x128のファイル専用になっていますので、画像サイズに合せて変更します。

image.png

##pythonで実行
私の環境はWindowsですので、CMDプロンプトで下記を実行します。出力はout.hに出力されます。

>python -m image-to-mem.py Clipboard01.png > out.h

###エラーが発生する場合
下記の用なエラーが発生する場合はPIL(Pillow)という画像ライブラリがインストールされていません。

Traceback (most recent call last):
  File "image-to-mem.py", line 5, in <module>
    from PIL import Image
ImportError: No module named PIL

おまじないコードを実行してから
>python -m pip install --upgrade pip

Pillowをインストールします。
>python -m pip install Pillow

うまく実行できれば変換データがout.hファイルに出力されますので、プロジェクトにインポートしてst7789_DrawImage()で表示します。

	ST7789_DrawImage(0, 0, 240, 240, (uint16_t *)image);

#最後に
IPS液晶はあざかやですね。
あと思った以上に遅いです。

image.png

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?