STM32F103を使ってみる

自作8ビットパラレルTFTライブラリ


こちらにIL9341 8ビットパラレルTFT用のライブラリが公開されています。
@ https://github.com/iwalpola/Adafruit_ILI9341_8bit_STM
A https://github.com/stevstrong/Adafruit_TFTLCD_8bit_STM32

これらのライブラリは非常に高速に動作しますが、利用できるコントローラーが限られています。
またサポートするTFTの解像度も限られています。
そこで、以下のコントローラーをサポートする8ビットパラレルTFT用のライブラリを作りました。
・ILI9325
・ILI9341
・ILI9342
・SPFD5408
・R61505
・ST7783
・LGDP4532
・R61509V
・ST7793
・ILI9481
・ILI9486
・RM68140

TFTの解像度も、ある程度自由に変更することができます。
ライブラリソースはこちらで 公開しています。




「Generic STM32F103C Series」のPCポートは、PC13からPC15のポートだけを使うことができますが
「Generic STM32F103R Series」のPCポートは、PC0からPC15の全てのポートを使うことができます。
そこで、データポートとしてPAポートかPCポートを選べるようにしました。
STM32F103R Seriesの時、データポートとしてPCポートを選ぶと、PAポートを全て空けることができます。

8 bit parallel interface
Port data |D7 |D6 |D5 |D4 |D3 |D2 |D1 |D0 |
Pin stm32 |PA7|PA6|PA5|PA4|PA3|PA2|PA1|PA0|
または
Port data |D7 |D6 |D5 |D4 |D3 |D2 |D1 |D0 |
Pin stm32 |PC7|PC6|PC5|PC4|PC3|PC2|PC1|PC0|

Control Pins
Control pins |RD |WR |RS |CS |RST|
Pin stm32 |PB3|PB4|PB5|PB6|PB7|(注)

(注)
一部のボードでは PA15 PB3 PB4 はデフォルトでJTAGにアサインされています。
afio_cfg_debug_ports(AFIO_DEBUG_NONE)
でJTAG機能を無効にする必要が有ります。


メモリーに余裕があるので、複数のコントローラーを1つのライブラリでサポートしても、あまり苦になりません。

64Kメモリーボード
最大65536バイトのフラッシュメモリのうち、スケッチが36844バイト(56%)を使っています。
最大20480バイトのRAMのうち、グローバル変数が3992バイト(19%)を使っていて、ローカル変数で16488バイト使うことができま す。

128Kメモリーボード
最大131072バイトのフラッシュメモリのうち、スケッチが36844バイト(28%)を使っています。
最大20480バイトのRAMのうち、グローバル変数が3992バイト(19%)を使っていて、ローカル変数で16488バイト使うことができま す。

複数のコントローラーをサポートできるように関数は汎用化したのでスピードはかなり犠牲になっています。
ILI9341のTFTを使って、今までのライブラリと処理速度を比べて見ました。
UNOの処理時間も比較のために掲載します。
時間の単位はmicrosecondsです。

STM32F103(SPI) STM32F103(SPI-DMA) STM32F103(8Bit) STM32F103(8Bit自作) Arduino UNO(8Bit)
Screen fill 705842 170778 315797 1192237 1379560
Text 46723 30783 26873 81870 344024
Lines 413007 153931 127669 776629 3390180
Horiz/Vert Lines 57334 15107 24582 98542 144664
Rectangles (outline) 36807 10155 15937 63769 104260
Rectangles (filled) 1465912 354919 656000 2474990 3267476
Circles (filled) 224149 94395 105220 406540 1211484
Circles (outline) 178859 121121 94079 341776 1475108
Triangles (outline) 131026 34792 30080 173610 1075596
Triangles (filled) 473196 140148 209074 837614 1721636
Rounded rects (outline) 80083 43570 39953 146978 506428
Rounded rects (filled) 1604185 400474 708444 2709478 3795228

自作ライブラリはSPI版よりも遅く、UNOよりも早い結果となりました。
高速描画をしたいのなら、ILI9341を使ったSPI-DMA版ライブラリがお勧めです。

続く...