STM32L-Discovery(STM32LDISCOVERY)をいろいろ使う


…ッッ…や、やっとEtherPod(STM32F107VCT6)にFreeRTOSとuIP実装してその上に
DHCPクライアントとDNSレゾルバとHTTPDとそして目的のNTPから時刻合わせ機能
の実装まで完成した…!uIPやFreeRTOS付属サンプルだけだとこんなん絶対でき
ませんわこれ…。先達たちがネット上に残した知恵を探しだすスキルが鍛えられました。

とにもかくにもこれで漸くこの子を卒業してSTM32F4系EthernetとLwIPに手を…!
ところでなんで去年の9月にできたこともう一度やってるかと言うと、ソースコード入
ったUSBメモリを地下鉄の溝に落っとこして壊してしまって1から全部作り直しになっ
たからです‥‥‥‥orzカツカツに作りこんでてバックアップをサボってるときに限ってこ
ういう事が起こるというorzorz
ちなみに虹裏上の活動で作ったり描いたりしてきた絵やとしあき君&「」からの大切な頂
き物は、4重のバックアップ体制で自宅が爆発しようが京都府に巨大隕石が落ちてクレ
ーターになろうが核の炎に包まれてシェルターにどう詰めてもあと二人しか入らないと
言われた瞬間にケンシロウに「トキ兄さん!」と言わせる間も与えずグゴゴゴゴと扉閉めてあげ
て二週間後にや、やぁ…と余裕こいて挨拶できるくらい絶対に失わないようにしてあ
りますのでご安心くださいまし(ニヤ・・)。



さてさわりはこの辺にしといて前回ほんの少しお話したSTM32L-Discoveryにごく基本
的ないつものを実装したのでご紹介します。

Discovery系で比較される対象はSTM32F100RBT6が載っているSTM32VL-Discovery
ですが、実際はこちらのSTM32L152RBT6が載ったSTM32L-Discoveryの方がはるかに
性能が高いです。

↑ねむいさんが目を付けためぼしい機能比較
STM32L系のほうが後から開発されたので当たり前と言っては当たり前なのですが、そ
のせいかバスの構成やペリフェラルのレジスタ構成などはSTM32F2/4系のMCU群と酷似
しています。私もそうでしたが、移植される方はSTM32F2/4系からのほうが楽です。

今回のいつもの(= FatFs + TFT-LCDドライバテストプログラム)について、当基板に
タッチセンス用のパタンとSTマイクロ謹製のSTM32L向けタッチセンスライブラリが用
意されているのでこちらも入力系に組み込んでいます(基本はUARTの入力のみです)。
お肌が乾燥してるとタッチセンスの入力が無反応になることがあります。S**Kです。


使用するピン/ペリフェラルの構成としてはSTM32VLDiscoveryの時となるべく似せる
ようにしてみました。今回もI/Oリソースの有効利用のためにSWD接続のみで書き込み
デバッグを行うようにしました。STM32L152RBT6は外付けの水晶を付けるとUSBも使用
できるのでこちらも試してみたいと思います。図中のLCDとあるのはLCDグラスドライ
バのことではなくいつものMCU接続タイプのTFT-LCDを指します。

あと使ってて気づきましたが、クロック周波数や多ピン品種の外部バスサポートとか
の超低消費電力とかのうたい文句見てるとXMEGA系みたいな8/16bitのアーキテクチャ
で大規模化したマイコンを潰しにかかってるなぁと感じましたね。どっちも使ってい
る私が言わせてもらうと
どう見てもARMのほうが扱いはるかに楽なんですもん…
FatFSのDMA化も楽にできましたし!(←まだ根に持ってる)


動かしているところです。ChaN氏のファイラは上述のとおり定番のUARTの他に基板上
のタッチセンスパタンからも入力可能です。タッチパネルTFT-LCDモジュールの時と
微妙に勝手が違うので差の吸収するために入力方法に工夫してあります。


既におきにある他のマイコン向けのデモも順次更新していますが、がた老氏が私の
移植例を使って成功したのを受け、デモ内のファイラにChaN氏のTextファイルビュー
アも盛り込んでいます。(STM32F107系は先行して公開してます)
ついでですが、XMEGAのFatFsのサンプルも大幅更新してます。ChaN氏の最近の実装を
参考にファイラをVRAMを使用しない構成とし、以前は出来なかったQVGAの解像度でも
ファイラを使用できるようになってます。もちろんTextファイルビューアや動画も(遅いですが)
再生可能になりました!


またまた話が逸れますがFatFsのSTM32・LPC2388(LPC1788も近日公開予定)・XMEGAへの
移植例としてChaN氏からリンク貼ってもらってるおかげで海外からのアクセスがうな
ぎ登りになってます。その9割が共産圏(元共産国含む)なのは置いといて海外から来た
人たちのためにリンクをわかり易くしました。これでもう"HENTAI-Siteに飛ばされた"
とは言わせませんよぅ!
日本国内についてはどうかというとアクセス解析やSNS等の発言をリサーチした限りでは私
の作例を参考にされてる方はlinux系OS使いな方たちが圧倒的です。Windows系の場合、
無料で利用できる統合開発環境はかなりの選択肢が存在しています。はじめてSTM32を
触る方々にとっては私のコマンドラインビルド中心な"どういう風にプログラムを組むか"
が主体のブログは全く参考にならずむしろ"その統合開発環境をどう使いこなすか"ことこ
そが往々にして最重要課題となるので、中身のないこと長々と書きましたが私は素の
Eclipseは使いませんったら使いません!!1!メーカお仕着せのやつでも拒絶反応gg



はぁはぁ…失礼…また話が逸れてしまいました‥
ぇっと後は書き込み/デバッグについてですが、前回ご紹介した通りSTLink/v2に対応
したOpenOCDからすべてを行います。また、私の作例中のmakefileをみたらすぐにわか
るはずなのですが、各デバッガハードウエア&MCU向けのcfgを引数にとってさらに
cfgに記してあるフラッシュ書き込み用のプロシージャコールを呼び出せばtelnetを接
続してチマチマしなくてもOpenOCD単体でフラッシュに書き込みができます。

↓STLink+OpenOCDから書き込むとこうなります。
(この記事を書いた当初はLibUSBを使用しておりました)

> "C:¥Devz¥AVR¥WinAVR¥utils¥bin¥make.exe" program
openocd -s C:/Devz/ARM/OCD/tcl -f target/stm32lx_stlink_flash.cfg -c "mt_flash main.elf"
Open On-Chip Debugger 0.6.0-dev-00448-gc59a441-dirty (2012-03-01-10:03)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Warn : must select a transport.
1 kHz
trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain
Info : clock speed 1 kHz
Info : IDCODE 2ba01477
Info : stm32lx.cpu: hardware has 6 breakpoints, 4 watchpoints
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x0800bf74 msp: 0x20004000
auto erase enabled
Info : flash size = 128kbytes
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x61000000 pc: 0x20000012 msp: 0x20004000
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x61000000 pc: 0x20000012 msp: 0x20004000
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x61000000 pc: 0x20000012 msp: 0x20004000
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x61000000 pc: 0x20000012 msp: 0x20004000
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x61000000 pc: 0x20000012 msp: 0x20004000
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x61000000 pc: 0x20000012 msp: 0x20004000
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x61000000 pc: 0x20000012 msp: 0x20004000
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x61000000 pc: 0x20000012 msp: 0x20004000
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x61000000 pc: 0x20000012 msp: 0x20004000
wrote 114688 bytes from file main.elf in 12.796548s (8.752 KiB/s)
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x61000000 pc: 0x2000003a msp: 0x20004000
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x61000000 pc: 0x2000003a msp: 0x20004000
verified 111172 bytes in 0.515612s (210.558 KiB/s)
shutdown command invoked

前回触れたAsynchronous Algorithmルーチンはすでに最新のコミットに取り入れられ
ています。

確認も終わったのでSTM32L-DiscoveryのSTLinkもVersaloon化しちゃいました!
この基板でSTLink部の回路構成が全く同じなのでVersaloon本体・DFUブート
ローダ共にSTM32F4Discoveryのものと全く同じのが流用できますが、こちらに
STM32LDiscovery用のを用意しましたので興味のある人はどうぞ。
Versaloon化
するメリットはUSB仮想COMが使用できる点に
尽きますね♥
※大事なことなので何度でも言います


あと注意点ですが、STM32LDiscoveryは外部リセット入力回路のプルアップ抵抗が省略
されています。R37に10kohmのチップ抵抗を必ず付けてください。

↓Versaloon化+OpenOCDから書き込むとこうなります。
> "C:¥Devz¥AVR¥WinAVR¥utils¥bin¥make.exe" program
openocd -s C:/Devz/ARM/OCD/tcl -f interface/vsllink_swd.cfg -f target/stm32lx_swd_flash.cfg -c "mt_flash main.elf"
Open On-Chip Debugger 0.6.0-dev-00448-gc59a441-dirty (2012-03-01-10:03)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Warn : must select a transport.
Info : OpenOCD runs in SWD mode
100 kHz
adapter_nsrst_delay: 100
jtag_ntrst_delay: 100
cortex_m3 reset_config sysresetreq
Info : Versaloon(0x34)by Simon(compiled on Feb 29 2012)
Info : USB_TO_XXX abilities: 0x00000008:0x00000040:0xC0000006
Info : clock speed 100 kHz
Info : stm32l.cpu: hardware has 6 breakpoints, 4 watchpoints
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x0800bcb8 msp: 0x20004000
STM32L: Enabling HSI
2000 kHz
auto erase enabled
Info : flash size = 128kbytes
wrote 110592 bytes from file main.elf in 17.983915s (6.005 KiB/s)
verified 110492 bytes in 1.140595s (94.602 KiB/s)
shutdown command invoked

んんn、現在の実装だとswdのクロックを途中で高速に変えられないので
ちょっと微妙ですね…128kByteしかないしまぁいいですか。


正直言うと素のSTLinkでもかなり使い勝手がよくなったので初めて触られる人は
無理にVersaloon化しなくても十分やっていけます。
いやはや良い時代になったものです。

Go to top of page