ページ

2013年11月6日水曜日

UbuntuでSTM32F3 Discoveryの開発環境を構築する

STM32F3Discoveryを頂いたので、開発環境を構築してみました。

Eclipseさんは使わずに、Makefile + OpenOCDのみを使っています。
また、リンカスクリプトはC++にも対応したものを利用していて、プロジェクトにStandard Peripheral Libraryも含めています。

--

まずはビルド用のツールチェインが必要になるので、GCC ARM Embedded Toolchainをインストールします。
幸いなことにppaが存在しますので、利用させていただくことにします。

sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded
sudo apt-get update
sudo apt-get install gcc-arm-none-eabi

次に、OpenOCDをインストールします。
OpenOCDはフリーのリモートデバッグのためのソフトウェアで、様々なボードに対応しています。
STM32F3DiscoveryにはST-LINKv2が搭載されているので、OpenOCDとはそれを通して通信を行います。


GDBとはTCPの3333番ポートを通してコマンドのやり取りを行います。また、Telnetの4444番ポートを通して、ターミナルからコマンドを投入することができ、フラッシュの消去やプログラムの書き込みなどが可能です。

aptのパッケージは古いので、sourcefourgeからソースを落としてきてビルドします。
この際、コンフィグでSTLINKを有効にしておきます。

./configure --enable-stlink
make

自分の環境ではlibusb-1.0.0-devが足りなかったので、apt-getして/usr/lib/x86_64-linux-gnu/libusb-1.0.so.0に/usr/libにlibusb.soの名前でシンボリックリンクを張りました。

ビルドが通ったらあとは

sudo make install

します。
成功したら、STLINK用のudevファイルをコピーします。

sudo cp /usr/local/share/openocd/contrib/openocd.udev /etc/udev/rules.d/70-openocd.rules
sudo udevadm control --reload-rules

ここまで終わったらボードを接続した状態で、

openocd -f /usr/local/share/openocd/scripts/board/stm32f3discovery.cfg

でボードと接続できます。

※ボードが接続されていない場合には、Error: open failed in procedure 'transport' in procedure 'init' のようなエラーが表示されます。

--

次に、プロジェクトの構築を行います。
まずは、STMicroが公開している、ライブラリを取得します。

STM32F30x/31x DSP and standard peripherals library, including 81 examples for 25 different peripherals and template project for 5 different IDEs (UM1581)

STM32F3 Discovery kit firmware package, including 28 examples and preconfigured projects for 4 different IDEs

どちらもSTMicroのページから検索するとダウンロードページまで辿りつけると思います。

リンカスクリプトに関してはこのブログを参考にし、BareCortexMプロジェクトからリンカスクリプトをいただきました。
MakefileとGDBスクリプトに関しては、こちらのブログを参考にしました。

これらを踏まえて作成したプロジェクトをgithubにて公開しています。
もしよろしければお使いください。

追記
静的変数コンストラクタの問題に悩まされ、結局リンカスクリプトとスタートアップファイルはStandard Peripheral Library付属のものに戻しました。
githubのプロジェクトも更新しておきます。

--

OpenOCDに関する注意

OpenOCD経由でターゲットボードにイメージを書きこむ際、

flash write_image erase path/to/image.elf

のようなコマンドを使うのですが、この時のパスはOpenOCD起動時の.cfgファイルからの相対パスとなります。
また、/home/以下などにイメージファイルがある場合、パーミッションがなくてOpenOCDがイメージファイルを開くことができません。
そのため、イメージファイルをどこか適当な場所に配置するか、OpenOCDをroot権限で起動する必要があります。

0 件のコメント:

コメントを投稿