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版ライブラリがお勧めです。
続く...