開発環境
ブランクが開きすぎたので色々できなくなっている...足場固めのためにSTM32の環境の再構築からやり直し。(以前研究室のWikiで書いた記事が消えてしまっているし...)
ソフトウェア準備
- Eclipse CDT インストール: Eclipse CDT
- EclipseにてZylin CDTプラグインインストール
- ARMコンパイラインストール: Code sourcery
- JTAGデバッガドライバソフト⇒ST-LINKの場合、Atollic True StudioのLite版付属のGDBサーバを使うしかない?
STM32マイコン用ファイル追加
STM32マイコンでは、周辺回路の操作を行うライブラリや、スタートアップファイル(最初に実行されるプログラム。C/C++プログラムの動作前に必要なスタックの設定・変数の初期化などを行う。)、プロジェクトのテンプレートなどが含まれている。
以下のファイルをEclipse上のプロジェクトにコピーしておく。
- STM32F10x_StdPeriph_Lib_V*.*.*
- Libraries
- Projects
- main.c
- stm32f10x_conf.h
- stm32f10x_it.h
- stm32f10x_it.c
- system_stm32f10x.c
Libraries以下には「system_stm32f10x.c/h」があるが、テンプレートのものと重複するため除外しておく。このファイルはクロックの設定を行うSystemInit関数を定義しているが、使用するクリスタルや動作させたいクロックの周波数によってユーザが変更しなくてはならないため、変更しやすいところの方が良い。
スタートアップファイルは複数あるが、アセンブラに対応しているもの(Code SourceryならTrueStudioかgcc_ride7ならOK)の中から、ターゲットマイコンのタイプ(cl,hd,ld,mdなど)を選んで使用する。拡張子が「.S」だとアセンブラが処理するので、使用するものだけ拡張子を変更すると良い。
リンカスクリプトは自分で作成してプロジェクトに追加しておく。
プロジェクト基本設定
(1) ツールチェイン設定
C/C++コンパイラ、アセンブラ、リンカを使用するタイプであれば良い。ここでは「MinGW GCC」を使用する。PCにMinGWやCygwinが入っていなくても問題はない。Cross-GCCが一番素直な選択肢だが、なぜかアセンブラが選択できないので使用しない。
(2) ビルダ設定
Code Sourceryでは、makeではなくcs-makeが使われるため、設定を書き換える。
(3) ディスカバリオプション設定
gcc の代わりに arm-none-eabi-gcc を設定。パスが通っていないと使えないので注意する。
- インクルードパス設定
- CMSIS/CM3/CoreSupport
- CMSIS/CM3/DeviceSupport/ST/STM32F10x
- STM32F10x_StdPeriph_Driver/inc
- その他適宜設定
- シンボル
- USE_STDPERIPH_DRIVER: Standard Peripheral Libraryの関数が使うのに必要(無いとifdefで定義されなくなるように作られているため)
- STM32F10X_MD: ターゲットの種類に応じて変更する。STM32-P103基板の場合、Medium densityのSTM32F103RBT6が乗っているのでこのシンボルを設定。
- その他フラグ
(5) リンカ設定
GCCのXlinkerオプション経由でリンカに渡されるオプションを定義。
以上の設定をすれば、ひとまずプログラムがコンパイルできるようになるはず。
この設定をSubversionなどで保存しておき、使い回せるようにすると便利。