ビルド †プログラムをビルドしターゲットボードに書き込む時のメモ Eclipse †プログラムをコンパイルし、ビルドを行いターゲットボードに書き込むまでを一手に引き受けるIDE(統合開発環境)としてEclipseを使用します。Eclpseは単純にダウンロードしただけでは出来ることは少なく、必要なプログラムをプラグインとして組み込んでいくことで自分用の開発環境を構築していきます。初めてEclipseを使う人には敷居が高く、本来のマイコン開発の目的から離れてしまうので、STM32徹底入門のHPのダウンロードコーナーに、環境構築済みのEclipse同梱版があるので、それをそのまま使うのが近道です。 Eclipseを日本語化したPleiadesというものもあります。私はPleiadesに開発ツールのインストールに従って環境を作ったので先のHPと異なる場合があります。 他のマイコンでは環境を構築するのに費用(コンパイラ等)が掛かったり、無償版には使用制限があったりしますが、STM32(ARM Cortex-M系)はGCC等のOSSを使って完全無償でフルスペックな開発環境を構築できます。 開発環境構築には簡単版:DFU(新版)を参考にして下さい。 ここに自分でやってみて悩んだところ等をメモします。 project Explorer †初期状態ではSamplesとSTM32の二つが存在します。SamplesにはサンプルがSTM32には雛形になるプロジェクトがあります。 STM32プロジェクトがビルド出来たら、一度エクスポートして雛形として取っておくのがよいと思います。プロジェクトを増やしたり、人から貰ったプロジェクトを取り込むには以下の様にします。
bin †ビルドして出来上がるhexファイル等が入ります。 inc †インクルードする自作のヘッダファイルを置きます。 jtag †JTAGに関するファイルの置き場です。 ld †リンカに関するファイルの置き場です。 lib †ライブラリの置き場です。
src †ソースファイルを置く場所です。 makefile †ターゲットボードの設定をするファイルです。 STBee = 1 DFU = 1 USART1 = 1 SD_SPI = 1 YAGARTO = 1 DEBUG = 1 #STVP_ALL = 1
例としてインクルード先の指定 INCLUDE_DIRS = -I . -I inc \ -I lib \ -I lib/CMSIS/CM3/CoreSupport -I lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x \ -I lib/STM32F10x_StdPeriph_Driver/inc \ -I lib/SD/inc \ -I lib/USART/inc -I lib/COM/inc -I lib/UTIL/inc\ -I lib/Startup \ -I lib/Platform これに続いてオブジェクトの指定などが続くのでプロジェクト・フォルダの構成を変更したり、競合するライブラリ(SDカードドライバやFatFs等のバージョンアップ)を排他的に利用する場合は変更します。 慣れるまでは意味不明になるので触らないほうが無難です。 main.c †メイン関数を書くプログラムソースファイルですが、ここに置く必要はありません。srcに置いても問題ありません。 大きなプロジェクトになるとmainだけに収めるのは不可能になってきますので、分割コンパイルする事になります。その場合はsrcに纏めると良いでしょう。 stm32f10x_it.c †割込み時に実行されるプログラムを書くファイルです。こに置く必要はありません。srcに置いても問題ありません。 stm32f10x_it.h †割り込みに関するヘッダファイルです。こに置く必要はありません。includeに置いても問題ありません。 Make Target †実際のビルドは、このペインのターゲットを実行します。プロジェクトを新規作成した時には無いので追加作成しておきます。
VCP †Vitural Com Portの略で書き込みに使うUSBを仮想COMポートとして使えます。デバッグ等に便利そうですが、実際のところはマイコンをリセットする度にパソコン側のターミナルを再起動する羽目にに陥るのでデバッグ用途には通常のUSARTをお勧めします。 現在のPCにはRS-232Cポートが無いうえ、マイコンのUSARTは3.3Vレベルなので、Arudino用にSparkfunから出ているUSBシリアルコンバータを愛用しています。ターゲットにPinヘッダを立てておいてデバッグが終われば使いまわせば経済的です。 マクロ †STM32徹底入門のサンプルは同じプログラム(ソースファイル)をターゲットボードが異なっても使いまわせるように、マクロを使ってGPIOポート等を指定しています。従ってファームウェアライブラリのマクロ名がさらに上書きされている場合があります。実際のピン名を解読するにはマクロ定義表を入手するか、lib/Platform以下のボード別ヘッダファイルを見ることになります。又、Eclipseのツールチップにも元の定義名が出てくることもあります。 デバッグ †printfデバッグ †JTAGを使わずにデバッグするにはSTM32徹底入門様提供のcprintf関数を使った、いわゆるprintfデバッグが基本です。printfデバッグは挿入するとその遅さからタイミングが狂って再現しなくなったりすることもあります。又、USARTの初期化前には使えません。 cprintf類似の関数はFatFsのxprintf等もあります。 GPIOデバッグ †printfデバッグより影響の少ない方法としてGPIOデバッグがあります。調査したい場所にGPIOのピンレベルを変換させるように短いコード(GPIO_SetBits等)を仕込んで置きます。分岐Aを通過したらトグルのようなかんじです。I2CやSPIをロジアナで解析する場合等も、取り込みたいタイミングの時にGPIOを変化させ、その変化をトリガにロジアナに取り込むようにすると往々にして少ないロジアナのメモリを節約することも出来ます。 GPIOはUSARTに比べて最低限の設定で動作出来る利点もありますが、表現できる状態は1/0しかありません。 JTAGデバッグ †動作することは確認しましたが、まだ活用出来ておりません。フルサイズのチップでないとピンが出ていないことも難しくさせています。が、利用できると非常に便利です。 |