HAL Driverが使えるSTM32系開発環境を作る
オヒサシブリデス
ARM Coreは昨今の組込技術には無くてはならない存在になってますね。
きがついたら
hbol.jp
Softbankが買収してたりと、最近になってARMという存在を知らなかった人にも名前くらいは浸透したのではないでしょうか。
さて、もちろん私もこの業界にいる限り避けては通れない存在です。
ARM Core CPUを販売しているメーカーのひとつにSTMicroがあります。STM32シリーズは価格が安く機能が充実しているものが多いので重宝されます。
今回はこのSTM32系の開発環境を構築していく手順をまとめます。
今回使用したものは、STMicro社のNucleo-F030R8ボードです。
評価ボードなので、ICEもついてて非常に使いやすいです。
秋月で1500円くらいで売ってます。
搭載されてるCPUはSTM32030R8T6で、STM32F0xシリーズに分類されます。
この記事では上記のボード、CPUを前提に進めますがそれ以外のものでも基本大丈夫なはずです。
少々手を加える必要はありますが。
STMicroが提供しているライブラリは現時点で2種類
Standard Peripheral Driver(通称SPD)
Hardware Abstraction Layer(通称HAL)
があります。
SPDの方が最初に提供されていたライブラリなのですが、後にHALが登場。
なのでネットなどを調べてもSPDを用いたものと、HALを用いたものでは出てくる量が全然違います。特に日本語(
しかし、STMicroは今後HALを推し進めていくようです。
さらには、一部評価ボードなどではもうSPDで操作できない部分もあるようで完全に切り捨てるようですね(
SPDとHALは互換性もないので、楽してSPDを使うと今後使えなくなった時にキッツイので。。。
なのでHALを使うことを目標に環境を立ち上げます。
色々と試行錯誤の末デバッグ環境までこぎつけた感じなので、もしかしたらいらない工程が含まれてるかもしれません。
とりあえず、現時点での私の環境をそのまま再現する手順を書きました。
これいらなかったとかアレばコメントなどください。
- System Workbench for STM32のインストール
- Eclipseプラグイン各種追加
- ツールチェインのインストール
- ビルドツールのインストール
- OpenOCDのインストール
- STM32 ST-LINK utilityのインストール
- OpenOCDの設定
- CubeMXからプロジェクトを作成する
- SW4STM32のプロジェクトに追加する
- デバッグする
- トラブルシューティング
- 1. System Workbench for STM32のインストール
- 2. Eclipseプラグイン各種追加
- 2.1. GNU ARM Eclipse Plug-ins
- 2.2. CubeMX
- 3. ツールチェインのインストール
- 4. ビルドツールのインストール
- 5. OpenOCDのインストール
- 6. STM32 ST-LINK utilityのインストール
- 7. OpenOCDの設定
- 8. CubeMXからプロジェクトを作成する
- 9. SW4STM32のプロジェクトに追加する
- 10. デバッグする
- 11. トラブルシューティング
- 11.1. Program “arm-none-eabi-gcc” not found in PATHというエラーが出る
- 11.2. Error: jtag status contains invalid mode value でデバッガが止まる
System Workbench for STM32のインストール
今回使うIDEはEclipseベースで作られた、System Workbench for STM32(以後、SW4STM32)を使います。
こちらはSTM32系の開発に必要なHAL Driverなどが含まれているので、まっさらなEclipseから構築するより楽です。
こちらのサイトへアクセスし、インストールファイルをDLしてください。
http://www.openstm32.org/HomePage
ユーザー登録が必要になりますのでご注意ください。
Eclipseプラグイン各種追加
SW4STM32のインストールが完了したら、早速起動します。
起動したらプラグインの導入に入ります。
Help -> Install New Software…を選択。
開いた窓でAdd…をクリック。
Add Repositoryダイアログが開くので、ここで追加するプラグインを指定します。
今回導入するプラグインは2種類です。
ここまでの手順は同じなので割愛して解説します。
GNU ARM Eclipse Plug-ins
さきほど開いたダイアログに
Name : GNU ARM Eclipse Plug-ins Location : http://gnuarmeclipse.sourceforge.net/updates
と入力。
該当したもの全てにチェックを入れて追加してください。
CubeMX
CubeMXとは、STMicroが提供するコードジェネレーターです。
CPUやボードの種類を選択して、各種GPIOやPeripheral Moduleの設定などを視覚的に行えます。
なくても問題なく書けますが、あると便利なので追加しました。
こちらのリンクからEclipseプラグインのzipファイルをDLしてください。
STM32CubeMX – STM32Cube initialization code generator – STMicroelectronics
DLしたら先ほど開いたダイアログで
Name : STM32CubeMX(任意) Location : Archive...ボタンをクリックし、DLしたzipファイルを選択
これでSW4STM32からCubeMXを呼び出せます。
ツールチェインのインストール
ARM用のコンパイラ、アセンブラ、リンカなどが含まれてます。
こちらからインストーラーをDLしてください。
GNU Arm Embedded Toolchain project files : GNU Arm Embedded Toolchain
なおWin32しかないです。64bitマシンでの動作は試してませんのでどうなるかわかりません(
DLしたらインストーラ起動、特に指定するものはありません。
ただ、インストール先のディレクトリは指定したほうがいいかもしれません。
デフォルトでもいけますが、スペースが間に入ったり、パスが長くなったりしますので。
特にWindowsだと260文字制限もありますし。なるべく浅めの階層で短いディレクトリネームにして作っておくほうが事故が少なく済みます。
ビルドツールのインストール
make、rmなどです。
こちらからインストーラーをDL。
Releases · xpack-dev-tools/windows-build-tools-xpack · GitHub
DLした後は先程のツールチェインと同様です。
こちらには64bit対応したものがあります。組み合わせによる不具合などは検証してません。
OpenOCDのインストール
OpenOCDとはGDBサーバーとプログラマの機能を持ったものです。
こちらからDLしてインストールしてください。
Releases · ilg-archived/openocd · GitHub
こちらもツールチェイン同様です。
STM32 ST-LINK utilityのインストール
ST-LINKとはSTMicro社が出しているICEです。
評価ボードに搭載されているICEもこれと同様のものなので、デバッガーを動かすために色々準備しましょう。
こちらのページから色々DLしてつっこみます。
ST-LINK/V2 – ST-LINK/V2 in-circuit debugger/programmer for STM8 and STM32 – STMicroelectronics
STM32 ST-LINK utility
ST-LINKを使ってbinファイルを書き込んだりするソフトです。
ST-LINK/V2 firmware upgrade
読んでそのまま、ST-LINKのファームウェアアップデートに使います。
ST-Link, ST-Link/V2, ST-Link/V2-1 USB driver signed for XP, Windows7, Windows8
ST-LINKのドライバです。
OpenOCDの設定
メニューバーのRun -> External Tools -> External Tools Configurations…を選択。
左側ツリーのProgramを選択し、更に左上にある白紙のマーク、Newをクリック。
各種設定を記述します。
Name : OpenOCD(Nucleo F0)
Mainタブから
Location : ${openocd_path}\${openocd_executable} Working Directory : ${openocd_path}\..\scripts Arguments : -s "${openocd_path}\..\scripts" -f board/st_nucleo_f0.cfg
board/st_nucleo_f0.cfgの部分は、使用するCPUやボードによって変更してください。
OpenOCDのインストールディレクトリ/scriptの中にある該当するパスを記述してください。
ST-Link V2でデバッグする場合は
interface/stlink-v2.cfg
を指定します。
- fコマンドは付け忘れないように。
-s "${openocd_path}\..\scripts" -f interface/stlink-v2.cfg -f target/stm32f1x.cfg
Buildタブから
Build before launchのチェックを外す
Commonタブから
Display in favorites menuのExternal Toolsにチェックを入れる
Applyで設定を適用する
次にString Substitution(ストリング置換)の記述を確認する。
Window -> PreferencesからPreferencesダイアログを表示
以下の2つがあるかを確認する。なければNew…から追加する。
Variable : Value openocd_executable : openocd.exe openocd_path : {OpenOCDのインストールディレクトリパス}/bin
とりあえず開発環境の構築まではできあがりました。
ここからはプロジェクトの作成にはいります。
CubeMXからプロジェクトを作成する
メニューバーのWindow -> Show View -> Otherを選択。
ツリー内、Otherの中にCubeMXがあるので、コレを選択してCubeMXを起動。
使用するCPU、またはボードを選択してPeripheralの設定を済ませます。
設定が済んだらCode Generateでプロジェクトを生成します。
CubeMXの使い方はここでは詳しく触れません。メンドクサイ比較的わかりやすいので。
SW4STM32のプロジェクトに追加する
SW4STM32にもどり、File -> Importを選択。
ツリー内、General -> Existing Projects into Workspaceを選択してNext。
Select root directory;に先ほど生成したプロジェクトディレクトリを指定。
すべて選択してFinishをクリック。
これでプロジェクトが追加されました。
デバッグする
Run -> Debug Configurationsを選択。
左側ツリーのAc6 STM32 Debuggingを選択。
Newから新規作成。
Nameなどは初期のままでOK。
変更する箇所はStartupタブのInitialization Commandsのテキストボックス内を編集
monitor reset monitor halt monitor flash protect 0 0 11 off
これを使えばデバッグ作業が可能になります。
トラブルシューティング
Program “arm-none-eabi-gcc” not found in PATHというエラーが出る
Projectツリーからプロジェクトを選択して右クリック。Propertiesを選択。
C/C++ Build -> SettingsからTool Settingsタブを選択。
ツリーからMCU Settingsを選択し、Pathを
{ツールチェインのインストールディレクトリ}/bin
にする。
Error: jtag status contains invalid mode value でデバッガが止まる
こんなメッセージを出してデバッガが応答しなくなることがある。
Error: jtag status contains invalid mode value - communication failure Polling target stm32f1x.cpu failed, GDB will be halted. Polling again in 100ms
入力ピンに内部・外部のプルアップ・プルダウン抵抗がついておらず、開放状態になってないか確認。
ハイインピーダンス状態になっていて、消費電流が極端に上がっている可能性があります。
導入方法は以上になります。
HALの使い方を勉強していかなきゃなぁ。。。
過去のものが使えないというのは大変。頑張りますかぁ。。。
ディスカッション
コメント一覧
まだ、コメントがありません