開発環境

ブランクが開きすぎたので色々できなくなっている...足場固めのためにSTM32の環境の再構築からやり直し。(以前研究室のWikiで書いた記事が消えてしまっているし...)


ソフトウェア準備

  1. Eclipse CDT インストール: Eclipse CDT
  2. EclipseにてZylin CDTプラグインインストール
  3. ARMコンパイラインストール: Code sourcery
  4. 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にMinGWCygwinが入っていなくても問題はない。Cross-GCCが一番素直な選択肢だが、なぜかアセンブラが選択できないので使用しない。

(2) ビルダ設定
Code Sourceryでは、makeではなくcs-makeが使われるため、設定を書き換える。

(3) ディスカバリオプション設定
gcc の代わりに arm-none-eabi-gcc を設定。パスが通っていないと使えないので注意する。

(3) アセンブラコンパイラ・リンカ設定

(4) C/C++コンパイラ設定

  • インクルードパス設定
    • 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が乗っているのでこのシンボルを設定。
  • その他フラグ
    • 「-c」: コンパイラは処理をコンパイルまでに留め、後でリンカを起動する。こうしないとソースファイル毎に実行形式を作ろうとしてしまう。
    • 「-mcpu=cortex-m3」: コアのタイプ指定
    • 「-mthumb」: Cortex-M3コアはThumb命令しか使えないため指定



(5) リンカ設定
GCCのXlinkerオプション経由でリンカに渡されるオプションを定義。

以上の設定をすれば、ひとまずプログラムがコンパイルできるようになるはず。
この設定をSubversionなどで保存しておき、使い回せるようにすると便利。