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


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

とにもかくにもこれでようやくこの子を卒業してSTM32F2/4系の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ファイルビューアや動画も(遅いですが)
再生可能になりました!


書き込みはXMEGAのJTAG接続に神対応して超使い勝手がよくなったHappyJTAG2を使用
してます!最早JTAGKey系のFT2232デバイス一つあるだけでARMとAVRの両方のフリー
な開発が可能になりました!
またまた話が逸れますが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化しなくても十分やっていけます。いやはや良い時代になったものです。

Comments

こんにちは。

いつも参考にさせていだたいております。┏○ペコ

もし知っていたら教えて頂きたいのですが・・・

aitendoのYHY024006AとM028C9325TPは同じILI9325を使用していますが、M028C9325TPは挙動がおかしいのです。
ライン関数で斜めにラインをひくと破線になってしまいます。
M028C9325TPは2枚所有しているのですが、同じ現象です。

STM32F4→M028C9325TPのピン配置→変換基板→YHY024006Aでは期待した表示がされるのでM028C9325TPの制御方法に間違いがあるような気がしてならないのですが、デバイスTYPEは9325とちゃんと読めているのでタイミング的には問題ないと思ってます。

同じILI9325でもバージョン違いがあるのでしょうか・・・

  • WELDER
  • 2012/03/22 3:01 AM

WELDER様、ねむいです。こんばんは。

確かにILI9325(無印)にはバージョン違いのILI9325Cが存在します。
ですが追加されたのはLED制御用ポートといくつかの接続方式で、初期化
手順は全く同一のものが使えるので今回の現象にはあてはまりません。

私が公開してるSTM32F4Discovery向けのコードをお使いなら下に挙げる
関数群を試して正しく表示されるかどうか切り分けてみてください。
Display_DrawRect_If()
Display_FillRect_If()
Display_DrawLine_If()
↑(斜めになるように座標を与える)
Display_Puts_If()もしくはDisplay_Puts_If_Ex()
↑(事前にFONTX2ドライバをロードするのを忘れずに)
Display_DrawCircle_If()

どれか一つの関数だけ表示がおかしかったらその関数内のアルゴリズム的
な問題だと思います。逆にすべての関数でドットの歯抜けや間延び、配色
異常が存在したらハードウエア寄りの問題となります。

こんにちは。

さっそくの解答ありがとうございます。┏○ペコ

基本的にどの関数でも表示がおかしいです。
マトモなのはclear関数くらいです。
でも手順的にはほぼ同じなカラーバー関数(自作です)は破線状態になります。
そのためLCDドライバーICの初期化の問題か、aitendoの赤い変換基板のデータバスにテレコがあるんじゃないかと疑っていたのですが・・・

LCDドライバーICの疑いはなさそうなのでR/Wを繰り返して調査してみたいと思います。

  • WELDER
  • 2012/03/22 8:18 PM

最新版の記事にコメントが入らなかったので
ここで質問です。

最新版の基盤を購入したいのですが、
型番の購入場所を教えて頂けないでしょうか。

よろしくお願いします。
(EVALが動けば、かなり色々出来そうですね。
外部メモリアクセスも対応できそうですし)

関西人様、ねむいです。こんばんは。
4/15の記事をコメントを許可にチェックするの忘れて投稿して
いましたすみません。今はコメントできるはずです。

さて、お問い合わせの件ですが私はtaobaoの下記店舗から購入しました。
item.taobao.com/item.htm?id=15665560571

代行業者さんの手数料や日本への国際送料を足してもかなりお得だと思います。

はじめまして、よしといいます。
ねむいさんの開発環境をセットアップしてSTM32Lを初めて動かしています。
TFT:H161T01
でいつものサンプルを動かすところまでできたのですが、フォントを10x10に変えたところ
region `ROM' overflowed by 65664 bytes
というエラーが出ました。
SUBMODEL = STM32L15XXB_128K
にしてみましたが同じエラーになります。
STM32Lは128KBまで使えるのだと思いますが、他に指定するところがありましたら教えてください。
よろしくお願いいたします。

  • よし
  • 2012/09/30 7:00 AM

自己フォローです。
region `ROM' overflowed by 65664 bytes
は128KBを超えたバイト数だとわかりました。

解説のとおりでSTM32L-discoveryでFDのようなものを動かすところまでできました。簡単にカラーTFTまで動く開発環境を構築できました。ありがとうございました。

  • よし
  • 2012/10/01 7:17 AM

よし様、はじめまして。ねむいです。

私が口を出すまでもなく問題を解決されたようで何よりです。

FONTX2の漢字・かな(2バイト文字)は文字の大きさに比例して一気に
ファイルサイズが増加してしまいます。
10x10ptのフォントをフルで載せようとすると100kByte以上になってしまい、
フラッシュメモリの容量が128kByteしかないSTM32L152RBT6では
実質ANKのみしか使用できませんのでご了承ください。
makefile中の"USE_KANJI"の定義をコメントアウトすればANKのみに
なるので2バイト文字が必要なければこちらでお願いします。

また、お伝え頂いたSUBMODELの定義が64kになっていたのは私の
誤りですので修正してプロジェクトを更新しておきました。

レスをありがとうございました。
10x10でも動いたのはいいのですが、Webでは大きく見えたTFTのあまりの小ささにびっくりしているところです。今度は3インチぐらいのにしようと思っているところです。

  • よし
  • 2012/10/01 5:40 PM

Post a Comment








Go to top of page