STM32 Value Line Discovery(STM32VLDISCOVERY)をいろいろ使う

CQ出版さんから"世界の定番"との触れ込みで大々的に宣伝されたSTM32ディスカバリ本
が発売されました。これはSTM32F100RBT6が使用されたSTM32ValueLineDiscovery基板
を扱い初心者向けに解説されたものであります。ちなみにSTM32なんちゃらディスカバリ
な基板はVL,L,F4と3種類あって"STM32ディスカバリ"と書かれてしまうとどれを指すのか
非常にややこしいのですがまぁそれは置いておいて…

以前からSTM32VLDiscovery基板については私も秋月さんからひっそりと販売されて
以来ちょこちょこと触れてきましたがこの基板に関する質問のメールをちらほらと頂くように
なったので改めて単独の記事として紹介したいと思います。
ちなみに便乗ではない!!


FatFsとTFT-LCD表示のデモプログラム
私のブログでいうところのいつもののことですが、STM32を扱う中でごく基本的な
要素を抑えてあります。私の他の物と同じくChaN氏のLPC2388向けのFatFsのプログ
ラムをベースにしていますが、移植しやすいように抽象度をかなり上げています。

フリーのコンパイラを使ったコマンドラインビルドに対応
・基板上のLED操作
・基板上のSW入力(外部4+1方向SWはオプションで)
・printf系標準関数がリターゲット可能なUART
(サイズ節約のためChaN氏のxprintfを割り振ってます)
・sprintf/malloc系標準関数のサポート
・systickとタイマを利用したAVR-Libcと同じ感覚で使えるDelay関数
・STM32間のポートの移植性を容易にしたFatFsのデバイス依存部
・容易に移植が可能なTFTLCD/OLED表示用ライブラリ
 SPI-LCDを使った時のブロック転送はDMA化可能。

ほかのマイコンからSTM32というかARMマイコンを始めた人が真っ先に引っかかるのは
sprintf/printf系標準関数がうまく動作しない点だとおもいます。今となってはFAQレ
ベルの事なのでここを熟読したり私のUARTへリターゲットしてる部分のコードを読んで
うまいこと動作させられるようにしてください。

上記のプログラムについては各ペリフェラルに対しポートの割り振りは以下のように
しています。特筆すべき点は、後述するSWD接続のVersaloonを使いデバッグすることに
限定してSWDでは使用しないJTAGポートの一部をSDカードアクセス用に割り振り、使用
可能なI/Oをさらに確保したところでしょうか。

※1:STM32VL-Discoveryデータシートより引用・加筆。
※2:単にポート振っただけでSW入力や8bitLCD等実際に使用してない個所があります。


定番のSPI接続のTFT-LCD(128x160)を動かしてみたところ。
ChaN氏のTJPegDecでjpeg画像を表示している最中です。

次回紹介予定の2.5元のi2c液晶モジュールも。素晴らしい掘り出し物です!



●STM32VL Discoveryに仕込まれてるSTLinkをVersaloon化
最早これも定番でしょう。STマイクロの**ディスカバリー系な基板にSTLinkとして仕込まれ
ているSTM32F103C8T6は各基板ごとに微妙にポートの配置が異なっていて同じVersaloon
のバイナリは使いまわしはできませんが、すでにVersaloon本家ではSTM32VLDiscovery
向けのファームウエアがサポートされています。

さて、肝心のVersaloon化の方法ですが本家ではDFU等のブートローダを仕込まずに直接
Versaloonのバイナリを書きこむようになっていますが、私はアップデートを容易にする
ためにいつも通りのDFUを仕込むようにしました。以下に私が行った手順を示します。
DFU仕込まない場合は"1."の書き込み時にいきなり本家の方のSTM32VLDiscovery用の
バイナリを書きこんでください(この場合別途ビルドする必要あり)。

1.DFUを仕込む
 こちらにSTM32VLDiscovery用DFUブートローダのバイナリを用意しました。
 (Versaloon_DFU_Bootloader_for_STM32VLDiscovery_.zip) 最初に書いてください。
 書きこむ方法はSTLink等のフラッシュを書きこむ手段が別に用意されてる場合はそちら
 を使ってください。Jim氏のTakenApartの記事にSTLinkをつかった手順が示されていま
 すのでそちらの記事をもとにDFUブートローダを書きこんでください。

 また、STM32はこの基板が初めてでフラッシュを書きこむ手段を他に持ってない人は,
 UARTブートローダーを使う方法を、こちらの改造手順2〜8を参照して書きこんでください。
 UARTブートローダを有効にするためのジャンパの引きまわしはSTM32VLDiscovery基板
 上では以下の写真の通りとなります。
 
 この基板上では足あげ等の加工も水晶の付け替えも必要なく0.5mmピッチの足からリ
 ードを引き出すだけなのでまぁ楽勝ですね。DFUを書き込んだ後はもちろんジャンパを
 はずすのを忘れないでください!

2.DFUを起動
 さて、DFUを書きこんだらPCに接続するわけですがSTM32VLDiscovery基板上では下
 画像のリセットボタンがDFUの起動キーとなります。リセットボタンを押しながらUSBケー
 ブルでPCと接続してください。
 
 USBデバイスとしてDFUが認識されたら成功です。
 
 そうだね画像使いまわしだね。言い忘れてましたがDFUseをインストールした時に
 DFUドライバがインストールされますので忘れずにインストールしておいてください。

3.Versaloonを書き込み/起動
 STM32VLDsicovery用のVersaloonのDFUファイルはこちらに。書き込み方はここの"14."を参
 照にしてください。向こうにあるDFUファイルは別物だから使っちゃだめです!
 書き終わったら基板を一度PCと切り離し、再度接続します。この時にVesaloonとして
 認識されたら成功です。VersaloonはLibUSBが使用されていますが、LibUSBのド
 ライバはZadigでインストールした方が確実です。
20120105追:
 以前はSWDのジャンパはあべこべになっていましたが、現在では
 差し替え無しでそのまま使用できます。



4.Versaloon化したSTM32VLDiscovery基板上でターゲットのSTM32F100RBT6をデバッグ
 冒頭で述べたプログラムをビルド・書きこみを行うわけですが、用意するものは
 STM32マイコンをビルドする環境のほかにVersaloonに対応した特別なOpenOCDが必要
 です。おもな手順はこちらこちらですでに紹介しています。

てわけで丸投げしまくりのやっけつ手順になってしまいましたが簡単に改造可能なの
で(自己責任の上で)お勧めします。しかも今のVersaloonはUSB-CDCが同時に使用でき
る複合デバイス構成になっているため、これを利用してこの基板上でUARTの通信手段を
完結させることができます♥

Go to top of page