2012年07月29日

STM32F4 DiscoveryをUbuntuから試食してみました

本記事のst-linkインストール部分はOpenOCDに変更したほうがよいかもしれないです。OpenOCDの記事はここにまとめましたー。

秋月で販売しているSTマイクロのSTM32F4 Discoveryというマイコンボード、非常に人気で一時期買うことすらままならなかったのですが、現在は買うことが出来ています。僕も欲しいなと思っていた一人ですが、買えなくて諦めていて、買えるようになったけど放っていて、しかしたまたまちょっとこのボードでやってみたいなーとかってことを妄想しだしたので、買うことにしました。

STM32F4Discovery.jpg

まず、このボードのスペックですが、メインプロセッサはARM Cortex-M4Fコア(最高168MHz)、内蔵Flash 1MB、内蔵RAM 192KB、周辺回路もいろいろ入っています。FPU(FPv4-SP)も搭載しています。コンパイラのオプションさえ整えれば使用できるでしょう。
また、ボード上に、ST-LINK/V2に対応したデバッガ、MEMS3軸加速度センサ、MEMSデジタルマイク、DACとDクラスアンプなどを搭載しています。
メインプロセッサはUSB On-the-goに対応してまして、既に東京のADK勉強会グループの赤川氏により、ADKのスタックも本ボード向けに公開されています。
こんな豪華なボードが、なんと1650円(秋月電子)なんです。なにこれ、やっす〜!普通考えられません。

開発環境ですが、どうやら当初はAtollic TrueSTUDIO for STM32F4という環境が無償提供されていたらしいです。しかしこれがなくなり、無料で使用出来るAtollic TrueSTUDIO Lite版はバイナリ出力サイズ制限32キロバイトというわけで、1メガバイトのフラッシュマイコンを使うには適さないので。いろいろググってゆくと、開発環境+デバッグ環境の構築に関して「ねむいさんのぶろぐ」にたどり着きました。

ねむいさんのぶろぐ : http://nemuisan.blog.bai.ne.jp/
こちらでは、Windows環境下で開発環境を構築され、OpenOCDというオープンソースのデバッガを接続して開発をされています。この記事を参考にしました。

ただ、僕の開発環境はMacBook Airです。VMwareにはWindows7もインストールされてはいますがCygwinなどは入れていないのでmakeはありません。VMware上にUbuntu 10.04LTS(x64)をインストールしていたので、せっかくですからこちらを利用したいと思っています。

というわけで、
・Ubuntu 10.04LTS(x64)でビルドして、書き換え、デバッグできる環境を作る(IDEは特に用意しない)
が目標です。
★この記事の目的は「備忘録」です。ひとまずLEDチカチカしたので、やったことをまとめました。もしかすると、いろいろ使い込むと、これから「あれ?」ということがあるかもしれません。そんなことがあれば、適宜解決して記事に書いていきたいと思います。

1. ツールチェインのインストール
ツールチェインは、Sourcery CodeBench Lite Editionを使用します。というわけで、以下にアクセスします。

http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/

「ARM Processors」の「Download the EABI Release」をクリック、メールを介して「Sourcery CodeBench Lite 2012.03-56」の「IA32 GNU/Linux TAR」(バイナリリリース版)をダウンロード、Ubuntuのどこかのフォルダに展開してください。ここから以降、展開したパスのbin以下にパスが通っているものとして説明します。(というわけで、パスを通しておいて下さい)

2. ツリーのダウンロードと展開
ねむいさんのぶろぐ(http://nemuisan.blog.bai.ne.jp/?cid=7947)にて、サンプルコードツリーをダウンロードできるようにされています。
「TFT/OLED Control Sample with ChaN's FatFs(SDIO&MMC Driver)」というコードをダウンロードさせていただき、このねむいさまのツリーをベースに以下のような改変をさせていただくことにしました。

このツリーは、Windowsのmake環境でしたが、それをLinuxからビルドできるように改変し、サンプルコードの豊富な機能を実現する各種モジュールのAPI結合を切断してLチカ(LEDチカチカ)を実装^^;するといった各種改変をごちゃごちゃっと入れました。ひとまず、汚い改変になっていますがすみません。結合を外しても元のソースコードは一切消してないので繋げればまた動作するかと。

Ubuntu x64でひとまずビルドできてなんか動いたツリーを固めたもの STM32F4_Sample_forLinuxBuildEnv.tgz

コンパイル方法は、

$ tar xvzf STM32F4_Sample_forLinuxBuildEnv.tgz
$ cd 展開したディレクトリの直下
$ make

こんだけです。1のツールチェインにパスが通っているようにしておいてください。
main.elfなどいろいろ生成されるでしょう。

3. stlinkのダウンロードとビルド
当初はST-LINK/V2に対応したOpenOCDを、、と思っていましたが、texane氏のstlinkをお試しさせていただいたらうまく動作したのでこれを使用させていただこうかと思っています。
(OpenOCDもその内立ちあげたいと思っていますが、これでうまくいっているので後回しに・・・)

stlinkはソースなのでビルドします。
以下のgithubからモジュールをダウンロード
https://github.com/texane/stlink


$ ./autogen.sh
$ ./configure
$ make

あとstlinkのドキュメントに従い、マスストレージ認識しないようにREADMEに従い、
$ cp stlink_v1.modprobe.conf /etc/modprobe.d
$ modprobe -r usb-storage && modprobe usb-storage
もやっておきました。

こんだけです。
ひとまず、STM32F4-Discoveryを接続し、初期状態のROMが動作している時に、ビルドで生成されるst-utilを実行すると、強制ブレーク状態になるかと思います。

4. gdbから2で生成したバイナリを焼きこむ
既に2のツリーはコンパイル済みでmain.elfができているものとします。
まず、3で生成されたst-utilを起動します。

$ st-link &

んで以下のようにします。

$ arm-none-eabi-gdb
(略)
gdb> tar remote :4242
(略)
gdb> load (path-to-main.elf)/main.elf
(略)

これでOKです。ボード電源を入れなおすとLチカしてましたらうまくいっているかと思います。

5. ソースコードデバッグする
ひとまずフロントエンドとしてemacsがあると素のgdbより全然使いやすいので(普段emacs使ってないと面倒なこともあるかも、しれないですけど…)それを使うことにします。
入ってなければ、「$ sudo apt-get install emacs」で入ります。
emacsを起動して、

M-x gdb

とし、

Run gdb (like this): arm-none-eabi-gdb --annotate=3 (path-to-main.elf)/main.elf

とします。
で、

gdb> tar remote :4242
(略)
とし、ひとまずmain関数にブレークを貼ってみます。
gdb> break main (main関数のあたまにブレーク)
gdb> c (コンテニュー実行)


これでmain関数の頭まで実行してブレークがかかります。
ソースコードも出ていますので、ステップすると、Lチカもステップで変化してました。
emacs-gdb-debugging.png


あと、標準入出力はUSART2と接続されてますので、ポートのPA2がTxD、PA3がRxDです。


STM32マイコン徹底入門 (TECH I Processor)
川内 康雄
CQ出版
売り上げランキング: 81809




最新ARM/Cortexマイコン徹底研究 (ARMマイコン No. 1)
トランジスタ技術編集部
CQ出版
売り上げランキング: 105220






実践 デバッグ技法 ―GDB、DDD、Eclipseによるデバッギング
Norman Matloff Peter Salzman
オライリージャパン
売り上げランキング: 148083
タグ:STM32F4
posted by いしいっち at 22:36| Comment(0) | TrackBack(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする