CONTENTS
ここからcygwinをインストールする.
Devel内にあるmakeをインストール指定すること.それ以外はデフォルトでよいと思う.
以下cygwinインストール先はc:\cygwinであるとする.
この項目は近いうちに消します.
codesourceryのコンパイル済みgccを使う.
codesourceryにあるtargetOSがEABIのものを使う.そのリンク先から"IA32 Windows TAR"をダウンロードして、c:\cygwin\usr\local\におく.
2009/12/26時点でのファイル名は"arm-2009q3-68-arm-none-eabi-i686-mingw32.tar.bz2"
.tar.bz2は,そのディレクトリで
$ tar jxvf arm-2009q3-68-arm-none-eabi-i686-mingw32.tar.bz2
として展開.展開すると"arm-2009q3"というディレクトリができる.名前が異なる場合やインストール先が異なる場合はmakefile内のTOOL_PATHを書き換える必要がある.
補完機能があってlinux,windowsともタダで使えてmakeが実行できるIDE(ほとんどエディタとしてしか使わないが)としてQt Creatorを使ってみる.
ウィンドウ分割とかもできてなかなか素敵.
Qt Creatorのダウンロードページの下の方にある"Qt Creator IDE"をダウンロードしてインストールします.セットアップウィザードは全てデフォルトで進めればよい.
IDEは使い方がわかるまで大変ですが,今回は以下の手順だけです.
なお,STM32program内では文字コードUTF-8を使っていますので,
"プロジェクト > エディタの設定 > デフォルトの文字コード"をUTF-8にします.
環境変数に
変数名: PATH
変数値: C:\cygwin\bin
を設定します.すでにPATHが存在する場合はセミコロン(;)で区切って追記します.
STM32programディレクトリで
$ make
してコンパイル.
依存関係で,ライブラリ,staticプログラム,mainプログラムを全てコンパイルします.もちろん2回目以降は変更されたファイルだけ.
#TOOL_PATH := /usr/local/arm-2009q3/ TOOL_PATH := 'C:\cygwin\usr\local\arm-2009q3\'
一応はじめに断っておくけれども,動作保証はしない.
windows用の開発環境と言いながら動作確認は主にlinuxで行っている.一応windows XPでも一通り動作することは確認しているが,後に追加された内容に関しては動作確認していないものもある.また,vistaや7,もしくはそれら64bit版においては一部以下の手順と異なる可能性がある.
コンパイラなどを拾ってきて"Hello world!"を表示することを目指す.
以下の手順に従って環境構築します.
stm32関係のファイルはSTマイクロのSTM32関係のページのリソースにいろいろあります.
読むべきファイルはとりあえず以下の3つ.全て英語で書かれていて読むのに時間がかかるが,それでも英語なので読めなくはない.なお,日本語訳のドキュメントもあるようだが,文書の質は落ちるのでむしろ読みにくいかもしれない.
codesourceryのコンパイル済みgccを使う.
codesourceryにあるtargetOSがEABIのものを使う.そのリンク先から"IA32 Windows Installer"をダウンロードして、実行してインストール.
ダウンロード方法はこのページが参考になる
ファイル名・・・"arm-2011.03-42-arm-none-eabi.exe" (2012/6/12の最新)
インストールウィザードは基本的に全てデフォルトのままでよい.これでパスも設定してくれる.
このままではライブラリを読みに行けないので,後に説明するプロジェクトフォルダ内のmakefileのTOOL_PATHを変更する必要がある.(STM32program_v2.3.0以降では必要なし)
STマイクロのSTM32ダウンロードページにある"Flash loader demonstrator"をダウンロード,展開,インストール.
ファイル名・・・"um0462.zip" (2011/3/12確認)
バージョン・・・v2.2.0 (2011/3/12時点)
デフォルトのインストール先・・・"C:\Program Files\STMicroelectronics\Software\Flash Loader Demonstrator\"
例えば,
http://mergedoc.sourceforge.jp/から”Pleiades All in One”のJREあり,C/C++のものをダウンロードして展開する.(3.6 Heliosでコンパイルできたのに3.7 Indigoでコンパイルできない事例があります)
ベースとなるプロジェクトフォルダを準備しました.基本的にはバージョン番号の大きいものを使用してください.
なお,ここの説明は最新のものを使用した場合について書いています.
STM32program_v2.0.2.zip (ライブラリv3.1.2)
STM32program_v2.0.3.zip (ライブラリv3.1.2)
STM32program_v2.1.0.zip (ライブラリv3.1.2)
STM32program_v2.2.0.zip (ライブラリv3.4.0)
STM32program_v2.2.1.zip (ライブラリv3.4.0)
STM32program_v2.2.2.zip (ライブラリv3.4.0)
STM32program_v2.3.0.zip (ライブラリv3.4.0)
STM32program_v2.3.1.zip (ライブラリv3.4.0)
STM32program_v2.3.2.zip (ライブラリv3.4.0)
TODO
STM32program_v2.2.2
&ref(): File not found: "folder_v2.2.0.png" at page "STM32_old";
最新版(v2.3.2)では少し仕様変更しました.が,説明はそのうち...
マイコンピュータ上で右クリック --> プロパティ --> ハードウェアタブ --> デバイスマネージャ-ポート(COMとLPT)を見れば確認できる.
Eclipseでプロジェクトを作成してビルドする.
ビルドといってもmakeコマンドを実行しているだけである.
具体的には以下のようにすればよいそうです.
パスの通っているところにmakeがないとビルドに失敗する.
また,rmがないとクリーンに失敗する.
この場合はcodesourceryのコンパイラフォルダにあるcs-make, cs-rmを使用すればよい.
そのための方法は主に2つある.
(a) exeファイル名を変更する
コンパイラインストール先のbinフォルダ内のファイル名を変更する.
cs-make.exe --> make.exe cs-rm.exe --> rm.exe
(b) eclipseから呼び出すコマンド名を変更する
ビルド時にはデフォルトのmakeではなくcs-makeを呼ぶようにする.
Project --> Properties --> C/C++ Build
の"Build command"を
make --> cs-make
に書き換える.
クリーン時にはデフォルトのrmではなくcs-rmを呼ぶようにする.
Project --> Properties --> C/C++ Build --> Environment
で環境変数RMを追加する.
文字コードは
Project --> Properties --> Resource
で変更できる.
上記プロジェクトフォルダはutf8で書かれている.
”Alt+/”で補完候補が出てくる.
書き込みは,マイコンを書き込みモードで起動して,write_main.batをダブルクリック.
teratermは終了してcomポートを開放しておくこと.
また,staticは放置しておいてOKなはずです.
batファイルの最後に
start "" "(path to teraterm)\ttermpro.exe"
と書いておくと勝手に起動するので便利だと思います.
teratermをダウンロードしてインストールする.
teratermを実行して適切なシリアルポートのポート番号を選択.
"設定"メニュー-"シリアルポート"で各種設定.
ボーレート | 115200 |
データ | 8 bit |
パリティ | none |
ストップ | 1 bit |
フロー制御 | none |
設定した後は,"設定"メニュー-"設定の保存"で"TERATERM.INI"を上書きしておくとよい.
STM32をROM領域から実行するモードで起動する.
いつ何がどう役に立つかはわからないので一応消さずに保存しておく.
STM32_old
ライブラリをダウンロードするとヘルプファイルが入っていますが,かなり読みにくいように思います.
そこで,昔のライブラリ用のマニュアル(UM0427)を使うことをお奨めします.
ただし,古いドキュメントですのでライブラリの仕様が変わっている場合には役に立ちません.
(ライブラリv3.4.0ではまだ使える)
STマイクロのSTM32ダウンロードページのリソースタブ内Firmwareにある
Archive for legacy STM32F10xxx Firmware Library V2.0.3 and all related Firmware packages
の中の
13457.pdf
がpdf版のライブラリの説明です.リファレンスマニュアルの項目に沿った構成になっているので読みやすい.
割り込みには以下の2種類がある.
これはSTM32のモジュールとは関係ない.
STM32はRAMが多いため,余っているメモリ領域を使って変数値のログをとるようにするとデバッグやパラメータの調整が容易になる.
そのために,例えば以下のソースとヘッダを準備する.
rlog.cpp (110521)
rlog.h (110521)
typedef float RAMLOG_TYPE; // ログをとるデータの型(int or float) static const int size = 1 * 1024; // ログ用配列のサイズ [byte] static const int unit = 8; // ログをとる項目数(最大8個)
rlog.init();を呼んで配列内のデータ先頭,終端を初期化する.
RLOG8(<var1>, <var2>, ..., <var8>);
<var1>などは変数名である.最大8変数まで記録できるが,必ずしも8個記録する必要はなく,
RLOG3(<var1>, <var2>, <var3>);のように3個だけ記録することもできる.記録する変数の個数がunitで指定した個数よりも少ない場合は0が書き込まれ,多い場合は超過分が無視される.
rlog.display();で表示する.データはカンマで区切られて出力されるので,teratermなどで送られてくるデータをcsvの拡張子で保存すればexcelなどで簡単にグラフ表示ができる.
#include "rlog.h" int main() { ... int a = 2; float bb = 4.5; float ccc = 1.23E-6; float dddd = -1.23456789; rlog.init(); RLOG4(a, bb, ccc, dddd); rlog.display(); ... }一回しか書き込み関数を呼んでいないから,出力されるのはラベル行と1行のデータであろう.
ロボットのソフトウェアを作っていく過程では定数の調整を頻繁に行う. STM32のFlashは1万回の書き換えができるのでFlashにパラメータを保存しておき,その書き換えを行うインターフェースを準備しておくと便利である.
parameter_110903.zip (use with STM32program_v2.3.2)
INT_ELEMENT(goal.x)をparm_array構造体に入れておけば良い.
int write_countの特殊変数を用意している.これはパラメータの書き込みを行う際にインクリメントされる.他のパラメータ同様,手動で変更することもできる.
#include "parm_iface.h" int main() { ... init_parm(); // 初期化.他のパラメータ関連関数よりも前に一回呼ぶこと. load_parms(); // パラメータをFlashからRamへ読み込む. print_parms(); // パラメータ一覧を表示する edit_parms(); // パラメータ書き換えインターフェース ... }何かの間違いでパラメータ全部が消えると痛い目を見るので print_parms()で表示されるパラメータをテキストファイル等に保存しておくこと.