車輪の再発明

電子工作とか信号処理とか、やってみたことの記録的なモノ

STM8S103F3P6でLチカしてみた

やってみたこと

OSX(El Capitan)にSTM8S103F3P6の開発環境を構築してLチカしてみました。つか、このマイコンボード界のトップランナーねこさんのやってることOSX上でトレースしてみただけってな感じ…。や、ホントにこちら以外では日本語の情報にまずお目にかかれないのでハゲシク感謝!

STM8S103F3P6ボード

Amazonで¥150の「HiLetgo STM8S103F3P6 STM8 ARM Minimum システム 開発ボード モジュール Arduinoと互換」。"ARM"とか"Arduinoと互換"てな清々しいまでのおかしな記述がありますけど動作は問題なさげです。

f:id:b09:20170612214445j:plain

開発環境的なもの

  • 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)。届いたときにはあまりのちっちゃさにビックリでしたけど、表示はクッキリとして美しいですねこれ。

f:id:b09:20170430214927j:plain f:id:b09:20170430214917j:plain

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

これで、ビルドおよび実行ができるようになりました!

f:id:b09:20170430214941j:plain