ホーム > ARM, Arduino > Arduino_STM32を試す

Arduino_STM32を試す

2016年01月08日 morecat_lab

開発中のArduino STM32を試しました。ARM (STM32)が搭載されているボードをArduinoで開発することが出来ます。

STBee

まだ日本語による情報が少ないので、一例を紹介します。

1. はじめに

巷で大流行りのArduinoですが、最近複数のプラットフォームを同時にサポートする仕組みが導入されました。

ARM Coretex-M3向けの拡張で、Arduino STM32プロジェクトもその一つです。開発を終えてしまったleaflab Mapleの資産を活用して、開発が進められています。

現在のところ、STM32アーキテクチャのCPUのうち、STM32F1シリーズと、GD32F1シリーズが対象です。

また、開発中のためライブラリの動作検証が済んでいないものが多いようです。コアに含まれている部分は動作しているようです。

2. 情報源

Arduino STM32プロジェクトの主な情報源は次の通りです。

3. 対応するハードウェア

サポートフォーラムハードウエアガイドが公開されています。

Arduino STM32対応のハードウェアとしては、以下があげられています。

ボード 特徴 価格 備考
leaflabs Maple / Maple mini クローン Arduino STM32の標準的なボード $5.00前後 ebayやaliexpressで安価に入手可能
Nucleo-F103RB ドラッグ&ドロップでプログラムできるデバッカが付いている 1500円程度 一枚でArduino / mbedが使えるユニバーサルなボード
一般的なSTM32コアのCPUボード ピン配置など千差万別 - スイッチ及びLEDピンの定義のあったブートローダを導入すること
STBee フラッシュが大きな割には安価

JTAGコネクタがついている

3000円 12MHzのクリスタルが付いている

(クロックの違いはブートローダで吸収)

4. 導入方法(STBeeの例)

ここでは、STBeeをArduini STM32から使用する方法を記載します。

4.1 Arduino  IDEの準備

Arduino IDE 1.6.4または1.6.5を利用します。(重要)

必ずArduino 1.6.5系を利用して下さい。

Arduino 1.6.6はサポートされていません(2016年1月)

Arduino STM32の導入方法については、Wikiのインストール方法説明に記載されています。

主な、手順は次の通りです。

(1) Arduino IDEにCortex-M3環境(Arduino SAM Boards)を導入する。

コンパイラなどはこのパッケージのものを利用するため、このパッケージを入れておきます。

導入手順は次の通りです。

  1. ツール -> ボード -> Board Managerを選択
  2. Arduino SAM Boards (32-bits ARM Coretex-M3) by Arduinoを選択
  3. Installボタンを押下

(2) Arduino-STM32パッケージを手動で導入する。

  1. Arduino-STM32パッケージをダウンロードして展開する。
  2. 展開したフォルダーをArduinoのフォルダー配下に移動する。
       ~/Documents/Arduino/hardware (MacOSXの場合)

4.2 ターゲットボードの準備

JTAGやシリアル経由でブートローダ(STM32duino-bootloader)をボードに書き込みます。

一度だけ実施すれば、あとはUSB経由でArduino IDEからプログラムを書き込めます。

ここでは2つの方法を紹介します。

  • シリアルインタフェース経由で書き込む

内蔵ブートローダを使って、シリアルインタフェース経由で書き込みます。

USB-シリアル変換アダプタ(FTDIアダプタ等)を用意する必要があります。

MacOSXでシリアル経由でターゲットボードにブートローダを書き込む

1. stm32flashを導入する(MacOSXではArduino_STM32に含まれるバージョンが必要です)

https://github.com/rogerclarkmelbourne/Arduino_STM32/tree/master/tools/src/stm32flash_serial/src

2. FTDIアダプタを経由して、ターゲットボードのシリアルと接続する

各RXとTXをクロスでつなぎます。

3. ターゲットボードを内蔵ブートローダを起動するように設定する

BOOT0ジャンパーをH(1)に設定する。BOOT1ジャンパーをL(0)に設定する

4. stm32flashで対応するブートローダを書き込む

$ stm32flash -w stbee_boot20.bin /dev/cu.usbserial-XXXXXX
stm32flash Arduino_STM32_0.9

http://github.com/rogerclarkmelbourne/arduino_stm32

Using Parser : Raw BINARY
Interface serial_posix: 57600 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (Medium-density)
- RAM        : 20KiB  (512b reserved by bootloader)
- Flash      : 128KiB (sector size: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB
Write to memory
Erasing memory
Wrote address 0x08001b7c (100.00%) Done.

5. ターゲットボードのジャンパーBOOT0をL(0)に変更してUSBで接続する。

  • JTAG経由で書き込む

JTAGコネクタを経由して、OpenOCDを使って書き込みます。

MacOSXでARM-USB-OCD JTAGアダプタ経由でOpenOCDを使ってブートローダを書き込む

1. mac portsなどでOpenOCDを入る

$ sudo port install openocd

2. FTDIドライバーのアンロード

$ sudo kextunload /System/Library/Extensions/FTDIUSBSerialDriver.kext

3. 書き込み

$ openocd -f flash.cfg

書き込みスクリプト例(flash.cfg)

StBEE with ARM-USB-JTAG

なお、Arduino_STM32ブートローダをStBEE用に改造したものは、既に本家githubに反映させています。

4.3 IDEからのスケッチの書き込み方法

(1) IDEでボードを選択する

  1. ツール -> ボード -> Generic STM32F103V Seriesを選択
  2. ツール -> Variant -> STM32F103VEを選択
  3. ツール -> Upload Method -> STM32duino bootloaderを選択

(2) ボードをDFUモードに設定する

ボード上の「USRスイッチ」を押しながらリセットすると、パソコンからの書き込みを受け付けるDFUモードに入ります。

  • 正しくDFUモードに設定されると、オンボードLEDが1秒間隔で点滅します。
  • USRスイッチを押さないでリセットすると、約2-3秒だけDFUモードになります。その後書き込まれているスケッチが動きます。

(3) Blinkの書き込み

BlinkではLED出力ピンを指定する必要があります。STBeeの場合には、LEDはPD4に接続されていて、Lで点灯しHで消灯します。

#define LED PD4

// the setup function runs once when you press reset or power the board
void setup() {
 // initialize digital pin LED as an output.
 pinMode(LED, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
 digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)
 delay(500);              // wait for 1/2 second
 digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW
 delay(500);              // wait for 1/2 second
}

書き込みがうまくできると次のようなメッセージがArduino IDEのコンソールに出ます。

スケッチが プログラムストレージ領域の 14,012バイト (2%) を使用しています。最大は 524,288バイト です。
グローバル変数は 2,936バイトの動的メモリを使用しています
Failed to open serial device.
dfu-util: Invalid DFU suffix signature
dfu-util: A valid DFU suffix will be required in a future dfu-util release!!!

dfu-util 0.8

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2014 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to dfu-util@lists.gnumonks.org

Deducing device DFU version from functional descriptor length
Opening DFU capable USB device...
ID 1eaf:0003
Run-time device DFU version 0110
Claiming USB DFU Interface...
Setting Alternate Setting #2 ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 0110
Device returned transfer size 2048
Copying data from PC to DFU device

Download    [                         ]   0%            0 bytes
Download    [===                      ]  12%         2048 bytes
Download    [======                   ]  25%         4096 bytes
Download    [=========                ]  38%         6144 bytes
Download    [============             ]  51%         8192 bytes
Download    [===============          ]  63%        10240 bytes
Download    [===================      ]  76%        12288 bytes
Download    [======================   ]  89%        14012 bytes
Download    [=========================] 100%        14012 bytes
Download done.
state(8) = dfuMANIFEST-WAIT-RESET, status(0) = No error condition is present
Done!
Resetting USB to switch back to runtime mode

MacOSX El Capitanではオートリセットが機能しないようです。

書き込み後、うまくリセットされない場合には、ボード上のリセットボタンを押下してください。

ライブラリの利用方法についても、機会があれば書きたいと思います。

(了)

カテゴリー: ARM, Arduino タグ:
コメントは受け付けていません。