(注意) 本スケッチをコンパイルする場合、
- Arduino IDE 1.8.xx(1.8.21で確認済)
- gcc ARMは arm-none-eabi-gcc-4.8.3-2014q1の利用必須
Arduino SAMD Boards (32-bits ARM Coetex-M3) 1.6.xx系(1.6.12で確認済) or
Arduino SAMD Boards (32-bits ARM Coetex-M0+) 1.6.xx系(1.6.21で確認済) - Arduino_STM32環境は、下記の修正版を利用
https://github.com/Tamakichi/Arduino_STM32/tree/base_245b97a
をご使用ください.
本プログラムは、下記オリジナル版をArduino STM32 向けに移植・機能拡張版です.
- オリジナル版配布サイト
https://github.com/vintagechips/ttbasic_arduino
関連情報 電脳伝説 Vintagechips - 豊四季タイニーBASIC確定版
「豊四季 Tiny BASIC」の著作権は開発者のTetsuya Suzuki氏にあります.
プログラム利用については、オリジナル版の著作権者の配布条件に従うものとします.
著作権者の同意なしに経済的な利益を得てはいけません.
この条件のもとで、利用、複写、改編、再配布を認めます.
- 「豊四季タイニーBASIC for Arduino STM32」 仕様編(更新中)
https://tamakichi.github.io/ttbasic_arduino_stm32/main.html - 「豊四季タイニーBASIC for Arduino STM32」 コマンドリファレンス(更新中)
https://tamakichi.github.io/ttbasic_arduino_stm32/manual.html - 「豊四季タイニーBASIC for Arduino STM32」 コンパイル環境の構築(旧)
https://tamakichi.github.io/ttbasic_arduino_stm32/install.html - 「豊四季タイニーBASIC for Arduino STM32」 キーワード一覧(更新中)
https://tamakichi.github.io/ttbasic_arduino_stm32/keyword.html
上記構成で表示機器は排他選択となります。次の構成にてシステムを組むことが出来ます。
Blue Pillボードを利用した場合の上記①~④をベースとした結線図を示します。
圧電スピーカーはオプションです。必要に応じて接続して下さい。
RTC用バックアップ電池、SDカードモジュールも必要に応じて追加できます。
(1)OLED I2Cインタフェース版
(2)OLED SPIインタフェース版
④TFT(ILI9341 320x240ドット)版
※5V・3.3V変換レギュレータが乗っている製品の場合、VCCは5Vを供給しないと動作しない場合があります。
-
PS/2キーボード用コネクタ
◾aitendo PS/2モジュール [ML-PS2-4P] http://www.aitendo.com/product/11377
◾秋月電子 USBコネクタDIP化キット(Aメス) http://akizukidenshi.com/catalog/g/gK-07429/ -
NTSC用 RCAコネクタ
◾aitendo TVOUTモジュールキット [K-TVOUT2R] http://www.aitendo.com/product/11740
◾aitendo RCAモジュールキット [brebo.jam.rca] http://www.aitendo.com/product/12125
◾秋月電子 RCAジャックDIP化キット(黄) http://akizukidenshi.com/catalog/g/gK-06522/
※aitendo製品は付属抵抗を使うと若干出力電圧が上がりますが、許容範囲です。 -
SDカードモジュール
amazon
◾EasyWordMall SDカードスロットソケットリーダーモジュールArduino用
◾Rasbee Micro SD/ TF カードモジュールシールド モジュール SPIインタフェース 1個
◾KKHMF マイクロSDストレージボード TFカードシールドモジュール SPIインタフェース Mega Due
◾ArduinoのためのマイクロSDカードモジュール
- OLEDディスプレイモジュール(128x64ドット)
SSD1306、SSD1309、SH1106の3つのコントローラに対応
I2C、SPIに対応、サイズは1.3インチ以上を推奨
Aliexpress
◾1PCS 1.3" OLED module white color SPI 128X64 1.3 inch OLED
◾1PCS 1.3" OLED module white color I2C128X64 1.3 inch OLED
- TFT(ILI9341)ディスプレイモジュール
320x240ドット SPI接続
amazon
◾HiLetgo 2.8 "TFT LCDディスプレイ タッチパネル SPIシリアル240 * 320 ILI9341 5V / 3.3V
◾ディスプレーモジュール,SODIAL(R)2.2" TFT LCDディスプレーモジュール基板
下記のリンクより直接ダウンロードして解凍、またはgitコマンドを使ってダウンロードして下さい。
-
ダウンロードリンク
https://github.com/Tamakichi/ttbasic_arduino_stm32/archive/master.zip -
gitを使ったダウンロード(複製のダウンロード)
git clone https://github.com/Tamakichi/ttbasic_arduino_stm32.git
Windows 10へのgitの導入は、下記の手順を参考にして下さい。
ダウンロードした本パッケージのトップフォルダを 📁ttbasic_arduino_stm32\ とします。
(解凍直後の tbasic_arduino_stm32-master から変更して下さい)
トップフォルダを任意の場所に配置して下さい。
📁ttbasic_arduino_stm32\ ・・・・ 本パッケージのトップフォルダ
📁bin\ ・・・・・・・・・・・・・コンパイル済みスケッチ(ファームウェア)
📁docs\ ・・・・・・・・・・・・ドキュメント類(作成中)
📁fontbin\ ・・・・・・・・・・・日本語フォント類
📁hardware\ ・・・・・・・・・・Arduino STM32パッケージ配置場所
📁libraries\ ・・・・・・・・・・・ スケッチ用ライブラリ
📁ttbasic\ ・・・・・・・・・・・ スケッチ本体
📄manual.pdf ・・・・・・・・・・ マニュアル(旧)
📄platform.local.txt ・・・・・・・ コンパイルオプション定義(OLEDコントローラ指定用)
📄README.md ・・・・・・・・・ 本ドキュメント
📄TinyBASIC早見表.pdf ・・・・・・ チートシート
📄キーワード.html ・・・・・・・・キーワード一覧(コマンド簡易説明書HTML版)
📄キーワード..pdf ・・・・・・・・・ キーワード一覧(コマンド簡易説明書PDF版)
Arduino IDEでスケッチをコンパイルする場合は、
Arduino IDEの環境設定の スケッチブックの保存場所 に 📁ttbasic_arduino_stm32\ を
設定して下さい。
これにより、既存の環境・ライブラリとの干渉減らすことが出来ます。
Arduino STM32パッケージは、随時更新されているため動作確認した時点のスナップショットに
不具合修正を行った、下記のパッケージをダウンロードして利用して下さい。
-
ダウンロードリンク
https://github.com/Tamakichi/Arduino_STM32/archive/refs/tags/base_245b97a.zip -
gitを使ったダウンロード(複製のダウンロード)
git clone -b base_245b97a https://github.com/Tamakichi/Arduino_STM32.git
Windows環境の場合、hardware\stm32Clone.bat を実行するとこでもダウンロード出来ます。
ダウンロードしたArduino STM32パッケージのトップフォルダを 📁Arduino_STM32\ とします。
(解凍直後の Arduino_STM32-master から変更して下さい)
Arduino STM32パッケージのトップフォルダは、📁hardware\の下に配置して下さい。
📁ttbasic_arduino_stm32\
📁hardware\
📁Arduino_STM32\
Arduino STM32パッケージに添付のUSBドライバをインストールします。
下記の📁win\📄install_drivers.basをクリックしてドライバをインストールします。
📁ttbasic_arduino_stm32\
📁hardware\
📁Arduino_STM32\
📁drivers\
📁win\
📄install_drivers.bas
Arduino 2.3.x系では、Arduino STM32パッケージのボート書き込みツールはJavaの実行環境が必要です。
Javaをインストールしていない場合は、インストールして下さい(Amazon Corretto 21推奨)。
- Open Java Development Kit Amazon Corretto 21 のダウンロード
https://docs.aws.amazon.com/corretto/latest/corretto-21-ug/downloads-list.html
コンパイル済みスケッチ(ファームウェア) を用意しています。
ファームウェアを直接マイコンボードに書き込んで利用することが出来ます。
プロジェクトファイルのbinフォルダに2つのタイプのファームウェアを用意しています。
-
ブートローダー無しファームウェア(.binファイル・バイナリー形式)
📁ttbasic_arduino_stm32\
📁bin\
📄ttbasic_NTSC.bin (NTSCビデオ出力版)
📄ttbasic_OLED_SH1106_I2C.bin (OLED SH1106 I2C版)
📄ttbasic_OLED_SH1106_SPI.bin (OLED SH1106 SPI版)
📄ttbasic_OLED_SSD1306_I2C.bin (OLEDSSD1306/SSD1309 I2C版)
📄ttbasic_OLED_SSD1306_SPI.bin (OLED SSD1306/SSD1309 SPI版)
📄ttbasic_Serial.bin (シリアルコンソール版)
📄ttbasic_TFT.bin (TFT ILI9341版)
📄ttwrite.bat ・・・ ファームウェア書き込み用バッチファイル -
ブートローダー付きファームウェア(バイナリー形式)
📁ttbasic_arduino_stm32\
📁bin\PlusBootloader\
📄boot_ttbasic_NTSC.bin (NTSCビデオ出力版)
📄boot_ttbasic_OLED_SH1106_I2C.bin (OLED SH1106 I2C版)
📄boot_ttbasic_OLED_SH1106_SPI.bin (OLED SH1106 SPI版)
📄boot_ttbasic_OLED_SSD1306_I2C.bin (OLED SSD1306/SSD1309 I2C版)
📄boot_ttbasic_OLED_SSD1306_SPI.bin (OLED SSD1306/SSD1309 SPI版)
📄boot_ttbasic_Serial.bin (シリアルコンソール版)
📄boot_ttbasic_TFT.bin (TFT ILI9341版)
📄ttbtwrite.bat ・・・ ブートローダ付きファームウェア書き込み用バッチファイル
利用するマイコンボードにArduino STM32用のブートローダーが書き込まれている必要があります。
BluePillボードへの書き込みは下記の記事等を参考して行って下さい。
- BluePillボードへのブートローダの書き込み(本パッケージ添付ドキュメント)
- DEKOのアヤシいお部屋-「STM32F103C8T6」http://ht-deko.com/arduino/stm32f103c8t6.html
-
ttwrite.bat
の修正set dev=COM4 ・・・
dev
にマイコンボードのUSBポートが利用するシリアルポートを指定します。
COM
は必ず半角大文字で記述して下さい。 -
コマンドプロンプト上でコマンド実行
コマンドプロンプトを起動します。
📁ttbasic_arduino_stm32\📁bin\ に移動し、次のコマンドを実行します。ttwrite ブートローダー無しファームウェアファイル
指定する ブートローダー無しファームウェアファイル は各自の利用目的に応じて選択して下さい。
ttwrite ttbasic_TFT.bin
を実行した例:ttwrite ttwrite ttbasic_TFT.bin
コマンド実行しても書き込みが開始されない場合、ボード上のリセットボタンを押すことで、
ブートローダーが強制的に書込みモードに切り替わります。試してみて下さい。別の方法として、エクスプローラー上で
ttwrite.bat
アイコン上にブートローダー無しファームウェアファイルのアイコンをドラック&ドロップすることで書き込むことが出来ます。
ブートローダーと同じ方法で書き込むこと出来ます。
(プログラマST-LINKのを使って、STM32 ST-LINK Utilityで書き込み)
ここでは添付のttbtwrite.batコマンドを使ったシリアル接続による方法を説明します。
-
USB-シリアル変換モジュールを用意して下さい。
パソコンに接続してシリアルポートを確認します。
ここでは、COM5とします。 -
添付の書込み用バッチファイルttbtwrite.batを各自の環境に合わせて修正します。
📁bin\PlusBootloader\
📄stm32flash.exe ・・ stm32flash(Arduino STM32に付属のもとの同じプログラムです)
📄ttbtwrite.bat ・・・ 書込み用バッチファイルset dev=COM5 stm32flash.exe -b 115200 -f -v -w %1 %dev%
devのシリアルポートの指定を各自の環境に合わせて変更して下さい。
-
BluePillボードのUSBポートを電源供給を兼ねてパソコンに接続します。
-
USB-シリアル変換モジュールとBlue Pillボード結線します。
USB-シリアル変換モジュール Blue Pillボード GND GND TXD A10 RXD A9
コマンドプロンプトを実行します。
ttbtwrite.batのある📁bin\PlusBootloader\ に移動し、次のコマンドを実行します。
ttbtwrite ブートローダー付きファームウェアファイル
ブートローダー付きファームウェアファイルは同じフォルダ内にあります。
各自の用途に合わせて指定して下さい。
ttbtwrite boot_ttbasic_Serial.bin
を実行した例:
ttbtwrite ttbtwrite boot_ttbasic_Serial.bin
書込みはエクスプローラー上でブートローダー付きファームウェアファイルのアイコンをttbtwrite.batのアイコンにドラック&ドロップする操作でも行うことが出来ます。
書込みが完了したら、BOOT0ジャンバを0に戻して下さい。
スケッチをコンパイルして書き込む場合の手順です。
スケッチは下記のフォルダのttbasic.inoが本体です。
📁ttbasic_arduino_stm32
📁ttbasic
📄ttbasic.ino
-
Arduino IDEのスケッチ保存場所の設定
Arduino IDEの環境設定の スケッチブックの保存場所 に
📁ttbasic_arduino_stm32\ を設定して下さい。
設定反映のため一旦Arduino IDE終了し、再度Arduino IDEを起動して下さい。 -
Arduino IDEのボードマネージャにて
「Arduino SAMD Boards (32-bits ARM Coetex-M3) by Arduino」の
1.6.x系の最新版をインストールして下さい。 -
Arduino IDEのボードの設定
Arduinoのメニューでボードの設定を行います。- ボード: Generic STM32F103C series
- Variant: Generic STM32F103C8(20k RAM 128k Flash)
- Upload method: STM32duino bootloader
- CPU Speed: 72MHz
- Optimize: Smallest
- Upload method: "STM32duino bootloader" ※各自環境に合わせて任意
- シリアルポート: ※各自環境に合わせて任意
-
STM32用USBドライバをインストールしているものとします。
上記の設定の詳細については、本パッケージ添付の下記のドキュメントも参照下さい。
デフォルトでは、基本4構成の②NTSC版(SDカードあり)の設定となっています。
異なるシステム構成で利用する場合は、それぞれに必要な修正を行って下さい。
tconfig.h
の修正
-
USE_SCREEN_MODE
の値1
を0
に変更して下さい.#define USE_SCREEN_MODE 0 //※デバイススクリーン利用の場合、1を指定する (デフォルト:1)
-
USE_NTSC
の値1
を0
に変更して下さい.#define USE_NTSC 1 // 0:利用しない 1:利用する (デフォルト:1)
tconfig.h
の修正
-
USE_NTSC
の値1
を0
に変更して下さい.#define USE_NTSC 0 // 0:利用しない 1:利用する (デフォルト:1)
-
USE_OLED
の値0
を1
に変更して下さい.
OLED_IFMODE
の値をI2C接続の場合0
、SPI接続の場合1
を指定して下さい.
必要に応じて、画面の向きOLED_RTMODE
を変更して下さい。#define USE_OLED 1 // 0:利用しない 1:利用する (デフォルト:0) // 利用時は USE_NTSC を0にすること #define OLED_IFMODE 1 // OLED接続モード(0:I2C 1:SPI デオフォルト:1 ) #define OLED_SCMODE 1 // スクリーンモード(1~6 デオフォルト:1 ) #define OLED_RTMODE 0 // 画面の向き (0~3: デフォルト: 0)
-
コントローラの選択
デフォルトでは、SH1106 対応となっています。
利用するコントローラをSSD1306/SSD1309に変更する場合、
利用するライブラリを切り替える必要があります。
この切り替えは、Arduinoのコンパイル条件指定を行う platform.local.txt ファイルにて指定します。本パッケージ添付の platform.local.txt ファイル
📁ttbasic_arduino_stm32\
📄platform.local.txtを下記のフォルダに配置して下さい(STM32F1の下)
📁ttbasic_arduino_stm32\
📁hardware\
📁Arduino_STM32\
📁STM32F1\
📄platform.local.txtplatform.local.txt は次のような定義となっています。
# These can be overridden in platform.local.txt # OLED_DEV: 0 SH1106、 1 SSD1306/SSD1309 compiler.c.extra_flags=-DOLED_DEV=1 compiler.cpp.extra_flags=-DOLED_DEV=1
OLED_DEVの値を変更することでもSH1106、SSD1306/SSD1309の切り替えを行うことが出来ます。
-
tconfig.h
の修正
USE_NTSC
の値1
を0
に変更して下さい.#define USE_NTSC 0 // 0:利用しない 1:利用する (デフォルト:1)
USE_TFT
の値0
を1
に修正して下さい.
必要に応じて、画面の向きTFT_RTMODE
を変更して下さい。#define USE_TFT 1 // 0:利用しない 1:利用する (デフォルト:0) // 利用時は USE_NTSC を0にすること #define TFT_SCMODE 1 // スクリーンモード(1~6 デオフォルト:1 ) #define TFT_RTMODE 3 // 画面の向き (0~3: デフォルト: 3)
Arduno IDEの「⇒」アイコンまたは、メニュー [スケッチ] > [マイコンボードに書き込む]にて
スケッチを書き込みます。
V0.87より、SDカードに配置した日本語フォントを利用するためのコマンドを追加しました。
専用コマンドにより、フォントデータの参照、全角文字列の描画を行うことが出来ます。
ダウンロードしたパッケージに添付の下記のフォントデータSFONT.BINを
SDカートのトップのディレクトリに配置して下さい。
📁ttbasic_arduino_stm32\ ・・・・ 本パッケージのトップフォルダ
📁fontbin\ ・・・・・・・・・・・日本語フォント類
📄SFONT.BIN ・・・・・・・・・・ フォントデータ
📄SFONTLCD.BIN ・・・・・・・・ フォントデータ(LCD用)
日本語(全角)コードはシフトJISコードを採用しています。
日本語(全角)文字列の入力は、WindowsのTeraTerm等のターミナルコンソールにて入力して下さい。
NTSC、OLED、TFT画面のテキストスクリーンエディタでの日本語表示には対応していません。
10 P=PC13
20 GPIO P,OUTPUT
30 OUT P,HIGH
40 FOR I=1 TO 10
50 OUT P,LOW
60 WAIT 300
70 OUT P,HIGH
80 WAIT 300
90 NEXT I
10 CLS
20 GPIO PB1,ANALOG
30 A=ANA(PB1)
40 LOCATE 5,5: ? A; " "
50 GOTO 30
10 @(1)=1,2,3,4,5,6,7,8
20 FOR I=1 TO 8
30 ? "@(";I;")=";@(I)
40 NEXT I
10 A=1
20 FOR I=0 TO 16
30 ? HEX$(A<<I,4)
40 NEXT I
100 GOSUB "SUB01"
110 GOSUB "SUB02"
120 N=0
130 "LOOP"
140 PRINT "N=";N
150 N=N+1:IF N<5 GOTO "LOOP"
160 END
170 "SUB01"
180 PRINT "SUB01"
190 RETURN
200 "SUB02"
210 PRINT "SUB02"
220 RETURN
1'12ドットフォントヒョウジ
10 GCLS
20 SETKANJI 12,1,0,0,GW-1
30 KANJI 0,0,"豊四季タイニーBASIC for Arduino STM32 V0.87では、日本語表示が可能です。"
TOYOSHIKI Tiny BASIC for Arduino
The code tested in Arduino Uno R3.
Use UART terminal, or temporarily use Arduino IDE serial monitor.
Operation example
> list
10 FOR I=2 TO -2 STEP -1; GOSUB 100; NEXT I
20 STOP
100 REM Subroutine
110 PRINT ABS(I); RETURN
OK
>run
2
1
0
1
2
OK
>
The grammar is the same as
PALO ALTO TinyBASIC by Li-Chen Wang
Except 3 point to show below.
(1)The contracted form of the description is invalid.
(2)Force abort key
PALO ALTO TinyBASIC -> [Ctrl]+[C]
TOYOSHIKI TinyBASIC -> [ESC]
NOTE: Probably, there is no input means in serial monitor.
(3)Other some beyond my expectations.
(C)2012 Tetsuya Suzuki