STM8S103F3P6でLチカしてみた
やってみたこと
OSX(El Capitan)にSTM8S103F3P6の開発環境を構築してLチカしてみました。つか、このマイコンボード界のトップランナーねこさんのやってることをOSX上でトレースしてみただけってな感じ…。や、ホントにこちら以外では日本語の情報にまずお目にかかれないのでハゲシク感謝!
STM8S103F3P6ボード
Amazonで¥150の「HiLetgo STM8S103F3P6 STM8 ARM Minimum システム 開発ボード モジュール Arduinoと互換」。"ARM"とか"Arduinoと互換"てな清々しいまでのおかしな記述がありますけど動作は問題なさげです。
開発環境的なもの
- STM8S103F3P6 : ホンタイ
- ST-LINK V2 : MACとSTM8ボードをつなぐアレ
※ ボードのUSBは電源供給のみなんですって - SDCC : コンパイラ
- STM8FLASH : STM8ボードにプログラムをライト
SDCCのインストール
SDCCってのは"Small Device C Compiler"でありまして、STM8に対応したCコンパイラですね。詳細は http://sdcc.sourceforge.net/を熟読していただくのが良いかと。
んで!これのインストールはOSX用のバイナリが用意されてるんでラクラク。しかもダウンロードページの先頭にOSX用があったりしてちょっと嬉しかったりします。
ダウンロードしたファイルを解凍すると中にINSTALL.txtがあるんでそれに従って/Developer/sdccにファイルをコピー。
STM8FLASHのインストール
先人も苦労されていたようなのですがー、今まで自分でビルドとかしたことなかったんでアタフタ。
ターミナルを使って格闘。
$ git clone https://github.com/vdudouyt/stm8flash $ cd stm8flash $ make
pkg-configがないって言われたのでインストール。
$ brew install pkg-config
もー1回makeするとエラーが出た… ググると同じエラーでショゲテル方がいます。同志よ…
compile fails under MacOSX 10.11.1 “el Capitan” #24
xcode-selectてのをインストールすると解決するらしいので従う。
$ xcode-select --install
時間差でインストールするか?的なダイアログが出てきて腰がひけた…
再度、make。エラーは出なくなったんですけど"pointer is missing a nullability type specifier"てなウォーニン(グ)が155個もでて泣きたくなった…。とはいえバイナリができたので試しに実行。
$ stm8flash Usage: stm8flash [-c programmer] [-p partno] [-s memtype] [-b bytes] [-r|-w|-v] <filename> Options: -? Display this help -c programmer Specify programmer used (stlink or stlinkv2) -p partno Specify STM8 device -l List supported STM8 devices -s memtype Specify memory type (flash, eeprom, ram, opt or explicit address) -b bytes Specify number of bytes -r <filename> Read data from device to file -w <filename> Write data from file to device -v <filename> Verify data in device against file -V Print Date(YearMonthDay-Version) and Version format is IE: 20171204-1.0 -u Unlock. Reset option bytes to factory default to remove write protection.
なんか雰囲気が良さげなのでウォーニンは見なかったことにして適当なパスにコピー。
$ cp stm8flash /usr/local/bin
※このあとにLチカのソースをコンパインしてどーのこーのを書くつもりだったのに、1ヶ月以上も下書きにホッタラカシにされてたので、ひとまず公開してしまおうとゆーグズグズな…
OLED SSD1306 128x64に表示してみた
やってみたこと
Arduino_STM32環境でOLED SSD1306 128x64をSTM32F103C8T6と接続してサンプルスケッチを動かしてみました。
安価なOLED
amazonで¥420の「HiLetgo 0.96" I2C IIC SPI シリアル 128×64 OLED LCDディスプレイSSD1306液晶 」。「OLED SSD1306」あたりのキーワードで調べると4ピンや6ピンのものもあるようですが、ここにあるのは7ピンのもの。ジャンパーでSPIとIICを切り替えられるようになってるようです(デフォルトSPI)。届いたときにはあまりのちっちゃさにビックリでしたけど、表示はクッキリとして美しいですねこれ。
STM32F103C8T6ではu8glibが使えない?
ちょっと前にArduino UNOでも試してるんですけど、そのときにはレスポンスが良いと評判のu8glibを使わせてもらいました。が、STM32にはライブラリが対応してないようなのでAdafruitで。
ライブラリにそのままズバリの「Adafruit SSD1306」があります。Arduino IDE(1.8.1)の「スケッチ > ライブラリをインクルード > ライブラリの管理…」からインストール。
STM32F103C8T6との接続
ライブラリをインストールすると「ファイル > スケッチ例」に「Adafruit SSD1306」が追加されてます。そこから「ssd1306_128x64_spi」を選択。
スケッチのピンのアサイン部分はデフォルトで以下のようになってます。
// If using software SPI (the default case): #define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13
これを接続に合わせて修正。(←接続の図がないのでナンノコッチャですけど…)
// If using software SPI (the default case): #define OLED_MOSI PB13 #define OLED_CLK PB12 #define OLED_DC PB15 #define OLED_CS PB14 #define OLED_RESET PA8
D0とかD1とか何?ってな感じでそーとー混乱しましたけど、整理するとラベルとディスプレイ本体の表示の関係は以下のようになってるようです。
ラベル | 本体の表示 |
---|---|
OLED_MOSI | D1 |
OLED_CLK | D0 |
OLED_DC | DC |
OLED_CS | CS |
OLED_RESET | RES |
ヘッダーファイルの修正
この状態でビルドするとエラーが出るのでlibrariesフォルダにある「Adafruit_SSD1306\Adafruit_SSD1306.h」をテキストエディタで修正。
74行目あたりで128x32用の定義がされてます。
// #define SSD1306_128_64 #define SSD1306_128_32 // #define SSD1306_96_16
ので、128x64を活かすように修正。
#define SSD1306_128_64 // #define SSD1306_128_32 // #define SSD1306_96_16
これで、ビルドおよび実行ができるようになりました!