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

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

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


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

フリーのSourcery CodeBenchを使い、コマンドラインビルドに対応
・基板上の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の通信手段を
完結させることができます♥

東海自然歩道を徃く10(関ヶ原〜春日モリモリ村/春日モリモリ村〜東津汲)

やあ (´・ω・`)
ようこそ、ねむいさんのぶろぐへ。
この蘇生の泉の水はサービスだから、まず一気飲みして落ち着いて欲しい。

うん、「また」なんだ。済まない。
仏の顔もって言うしね、某ニコニコ動画向けの電子工作にパクr…流用できるネタを
探して、或いはどうしても動かないSTM32とかを何とかして動かしたくて藁にも
すがる思いでググってやってきた君達に謝って許してもらおうとも思っていない。
でも、東海自然歩道ってキーワードを見たとき、君は、きっと言葉では言い表せない
「ときめき」みたいなものを感じてくれたと思う。
殺伐とした世の中で、そういう気持ちを忘れないで欲しい
そう思って、この項目を作ったんだ。


じゃあ今春の続き、中部地方ステージ行ってみようか。


●2011.10.29 関ヶ原〜春日モリモリ村

前回の近畿ステージ終了地点だったJR関ヶ原駅は中部地方ステージの開始点
でもあります!


今回のルートは37km程ありますがそのほとんどをアスファルトの車道を走ります!


伊富岐神社です。


東海道本線の下り線路が眼下に。


竹中半兵衛陣屋跡です。


何故か左の柱に荒縄が巻きつけてある遊景寺です。


ね  こ


近藤石材さんのDORAEMON様の仏像…


地平に向かってどこまでも伸びるかのようなあぜ道。
この景色が見たくて私はいつも野に出てしまいます…うふふふふふふふふふ


旧美濃国分寺跡です。でかい!


美濃国分寺手前にある民俗資料館の手洗い場には先客が…。



現在の美濃国分寺です。ねむいさんは30歳くらいまで美濃を「みのう」と
読んでいたおりこうさんです…。ここで20分ほど小休止&散策。



園興寺です。


本日最後のトレイルには熊注意の看板が!
股間にある"出"の字が微妙にでかくてアートですね…


トレイルを抜けるとあとはひたすら車道です。
池田ぁ


池田と触れ合う街道…
虹裏知識しかしらなかった当時の私は、漫画の作中ではめったにだしだし言わない
池田に違和感感じまくりだったし!


桜が有名な霞間が渓です。


以前はここから池田山を通過し、野原谷を経て春日モリモリ村に到達するルートでしたが、
崩壊が激しく維持が困難のため麓の車道をぐるっと迂回するルートに切り替わりました。
…が、他の方の旧東海自然歩道の冒険を見てると私も…と言いたいところですが
まずは本ルートを越えてからですね…。


車道を歩いているとかつて一世風靡した謎の金属片を発見!
ちょっと感激です!



大津谷公園です。この先をもう少し進むとルートは西に向かいます。


二条関白蘇生の泉です。ねむいさんもちろんで飲みました!ウマーィ!
(※危険ですから絶対にまねしないでください!煮沸して飲んでください!)


端巌寺です。


端巌寺橋から粕川を。水がとっても綺麗。


ここから先は春日モリモリ村までラストスパーt…
ヤダなにこのチンチン村って////


モリモリ村と鍋倉山の分岐点まで来ました。
東海自然歩道とはここで離脱です。


モリモリ村に到着です!…ヤダまたチンチン村って////
ゲフン失礼…今日の目的はもう一つあります…それはここにある温泉♥


こういう場所にある入浴施設って800円くらい取るボッタ価格が多いのですが、
市街地のお風呂屋さんと変わらない値段でかなり良心的ですね…!


お風呂に入って汗と疲れを洗い流したあとは地元の野菜を使った薬膳ラーメンを。
お値段780円也。左上に見える水は私が汲んできた蘇生の泉の水です。


モリモリ村を離れコミュニティバスに乗って揖斐駅に着いたころにはすっかり夜の帳が
降りていました。


●2011.11.13 春日モリモリ村〜東津汲

いびがわマラソンの参加者さん達でごった返す揖斐駅…
この駅にしてはめったに見られない人の数ですね(←失礼)


今回は春日モリモリ村から鍋倉山を越えて東津汲まで行きます。
東津汲への到達時刻が14:40以内ならばさらに進んで横蔵寺まで進むつもりです!


旧東海自然歩道の野原谷方面。吸いこまれるような何かを感じます…。


まずは谷山集落跡を目指します。
前回の分岐点にはこんな脅し文句が…!11月の上旬でしたが西藤原の時の教訓
をかんがみてねむいさん完全装備で挑みました!


谷山集落跡の入り口です。何故か二つある道標。そしてぼけた写真。


谷山集落を抜けて山道に入ったこの地点でルートミスをしてしまいました。
直進せずに土管?ある場所を左折するのが正解です!


ルートミスしてしまうと遅れを取り戻すために精神力と体力を大幅に消費
してしまいますが真夏の青山高原で鍛えられたので脚が攣ってもなおも登ります!


何とか予定時間少し過ぎに鍋倉山避難小屋に到着です…。
ここで小休止して体勢を立て直しました。



鍋倉山には何故か山頂の解説が二つあります。
上はにせもの下が本物です。


長者平より。紅葉が見られてきました。


星霜を経て無残な姿になった日坂越の道標と道祖神。


日坂の車道まで下山してきました。東津汲までひたすら車道です!


??これが高橋家??


ですって
道標のいいなりに車道をつっ切ってしまうと恋は成就しません…


ここは道標が直進になっていてトンネルを潜るかのように思えますが
道標が間違いで右折が正解です!


で、トンネル潜ってしまったのでそのままさらに久瀬方面のトンネルをくぐり
久瀬ダムへ。東津汲まであと少しです。


車の交通が多い交差点を抜け東津汲バス停に到着です。
到着時は14:33で横蔵寺に行ける時間的余裕がありましたが少雨が降りだして
おり、日没で暗くなるのが早まるのと道がぬかるんで悪くなると判断しここで
終了としました。


揖斐川に掛る久瀬橋のにある解説文です。次回はここからスタートです。


再び揖斐駅に戻ってきました。駅では帰宅するマラソンランナー向けの屋台
なんかがあって私も串カツ買ったりしたのですがねむいさんと同じくらいの
年の方に「来年もまた走りに来てくださいね♥」と言われてしまいましたが…
私は2週間後にまたここに来るんです


というわけで今回の軌跡はこんな感じです。今回の行程からGPSモジュールUP-501
本格運用しています。感度の方はいないさんのおっぱいのごとく抜群ですね♥ぐふふ…
関ヶ原〜春日モリモリ村 GPSログ

春日モリモリ村〜東津汲 GPSログ



次回は横蔵寺&華厳寺とお寺巡り中心となる行程です。
そして…!ねむいさんはすでにみちびき対応のGPSモジュールを手に入れたのでこの
行程で威力を実証するのだぁ!

STM32F4シリーズを使ってみる3 -FatFsと下部レイヤ(SDIO・MMC)ドライバたちの実装-


来たぞー!
…って来たのはもう2週間以上前ですけど…
144PinのSTM32F4も手に入ったのでSTM32F2の時と同じく中華生基板に組んでみました。
STM32F2とF4はほとんど同じです。特にコードは上位互換があるので回路を完全に合わ
せるとF2のコードがそのまま使用できちゃったりします。まあでもさっさとCortex-M4F用
にしてしまった方が良いでしょう。



↑ということでいつものChan氏のプログラムを走らせてみました。

特筆すべきはF2系では何とか動くものの安定していなかった48MHz動作のSDIOが
F4系では非常に安定してることで、SDカードとさらに大容量/高速なデータのやり取りが
できるようになっています。ただし高速なクロックに耐えうるSDカードの選択は必須で、
Class10のカードを必ず選んでください。最近出回ってるUHS-1の奴は逆に駄目なものも
ありましたので幾つか購入して試してみてください。あと当たり前のことですが、配線の
引き回しもものすごく重要なので注意してください。

↑でたらめ書いてました。SDカードの通常モードは25MHzが使用上の上限値で
 STM32F2/F4ではUSBとの共用を考えると24MHzが実際に安定して動かせられる
 クロック上限となります。お詫びして訂正します。

んでもって前回さらっとお見せしたSTM32F4 Discoveryの方のいつものですが、ちゃんとした
実装にあたり、周辺にぶら下がってる回路の影響でどのように構成すべきか悩みました。
なぜならば…
SDIO : SDIO_CLKがCS43L22のSDINとかぶってるから使えない
FSMC : 肝心のnRDがCS43L22のResetに、nWRがUSBの過電流検出に被ってて(ry
    その他諸々のペリフェラルが被ってて(ry
SPI3 : CS43L22がI2S3として使ってて(ryついでにI2C1も
SPI2 : MP45DT02がI2S2とし(ry
SPI1 : LIS302DLがSPI1(ry


まぢでひっぺがしたろかと思いましたが先に書いた通りSTM32F407ZGTが手に入った
のでSTM32+SDIO+FATFS+FSMCの構成はこっちに実装してDiscoveryの方は既存のペリフェラル
と何とか共存する道を選んでみました。
てわけで妥協したのが以下のSTM32+MMC+FATFS+SPI-LCDのプラン…。

SDカード : SPI1(LIS302DL(SPI通信)と共用)
TFT液晶 : SPI2(MP45DT02(I2S通信)と排他)
      ※STM32F4DiscoveryではSPITFT液晶のみ対応
その他  : CS43L22は丸々残す!
      UARTはUART2(TX:PA2 RX:PA3)
SDカードとSPITFT液晶はもちろんDMA化してあります。

TFT液晶がシリアルしか使えない上にMOSIがI2Sの入力とかぶってしまうのでMP45DT02
とは排他になっていますが、必要な人はGPIOによるソフトSPI(超遅いですが)で逃げても
よいと思います。私のLCD表示ドライバは潰しが効くようにかなり柔軟にデバイス依存の
部分を作り込んであります。またSTM32F1系ではペリフェラルはひとかたまり単位でしか
リマップできない構成でしたが、F2系以降はピン単位で柔軟なリマップができるように
なったのでみなさんもデータシートとにらめっこして工夫してみてください。

とりあえずSTM32F4 Discovery上でこの構成でハード改造を行わずに音楽再生はかろう
じてできるでしょうか。音再生関係の作り込みはこれからなのでがんばってみます!




てわけでいつものコードでSDカードの読み出し速度比較を行ってみました。
使用したカードはClass10が策定される前に販売されたATP製4GBClass6のmicroSDです。



STM32F4Discovery上で組んだFatFsは先に書いた通りの構成ですが、SPI1は42MHz
まで叩きだせるので読み出し速度もめっちゃ速いです!(注:SDカードは選びます)
音楽再生程度ならもう十分な早さですね♥今回の実装に際してMMCのSTM32用
ドライバも移植性をかなり高めた作りにしてみました(もちろんDMA化も)!

ちなみにDMA化に際する注意事項ですが、前回も言及していますが、CCM領域をDMAの
読み書き先として利用することは一切できません!
STM32F4系でCCM領域を高速な
スタック領域として使用する前提でF2系から移植を考えた場合、既存のプログラムがauto変数
をDMAの読み書き先として定義されていると特定困難な不具合に悩まされる可能性があ
りますのでよく吟味してください。


お次は中華生基板(STM32F407ZGT6)で組んだSDIOの読み出しスピードです。
上にも書いていますが、F2系ではコケまくって全く安定してなかった48MHzのクロック
でも安定してアクセスができるようになり、20MByte/Sec以上のすさまじいスピードで
読み出しが可能になりました♥ちなみにこの基板上ではFSMCもDMA化してます!



バグ出しもほとんど終わり、最低限のドキュメントもそろいましたのでSTM32F4 Discovery
と中華基板対応のいつものコードを公開します。makeファイル内の定義でSTM32F4Discoveryと
中華生基板のビルドを切り替えることができます。その他細かい部分のノウハウは口で説明す
るよりソース見てもらった方が分かると思います。だから誰か早くSTM32F4Discovery
mp3プレーヤー作ってくだち!!

20121220追:
STM32F4Discovery用でMP3再生機能追加しました!




あ、お伝え忘れてました。今回の公開に当たってSTM32F2系STM32F107、そして
最近この検索ワードでアクセスが急増中のSTM32VLDiscovery向けのFatFs+液晶表示プロ
グラムも大幅に更新しておきました
んでもってOpenOCD用Flash書き込みCFG群もSTM32F4xx用を追加しておきましたよぅ

Go to top of page