ビルド

プログラムをビルドしターゲットボードに書き込む時のメモ

Eclipse

プログラムをコンパイルし、ビルドを行いターゲットボードに書き込むまでを一手に引き受けるIDE(統合開発環境)としてEclipseを使用します。Eclpseは単純にダウンロードしただけでは出来ることは少なく、必要なプログラムをプラグインとして組み込んでいくことで自分用の開発環境を構築していきます。初めてEclipseを使う人には敷居が高く、本来のマイコン開発の目的から離れてしまうので、STM32徹底入門のHPのダウンロードコーナーに、環境構築済みのEclipse同梱版があるので、それをそのまま使うのが近道です。

Eclipseを日本語化したPleiadesというものもあります。私はPleiadesに開発ツールのインストールに従って環境を作ったので先のHPと異なる場合があります。

他のマイコンでは環境を構築するのに費用(コンパイラ等)が掛かったり、無償版には使用制限があったりしますが、STM32(ARM Cortex-M系)はGCC等のOSSを使って完全無償でフルスペックな開発環境を構築できます。

開発環境構築には簡単版:DFU(新版)を参考にして下さい。

ここに自分でやってみて悩んだところ等をメモします。

eclipse.jpg

project Explorer

初期状態ではSamplesとSTM32の二つが存在します。SamplesにはサンプルがSTM32には雛形になるプロジェクトがあります。

STM32プロジェクトがビルド出来たら、一度エクスポートして雛形として取っておくのがよいと思います。プロジェクトを増やしたり、人から貰ったプロジェクトを取り込むには以下の様にします。

  1. 左側ペインのproject Explorerで新規プロジェクト(C Target)を作成します。
  2. エクスポートしたSTM32プロジェクトをインポートします。
  3. 右側ペインのMake Targetにターゲット(all,all_clean,main,flash等)を作成しておきます。
  4. プロジェクトプロパティを開いてC/C++ BuildのBuilder Settings → Build commandを../../toolchain/yagarto/bin/make に変更しておきます。
eclipse_build.jpg

bin

ビルドして出来上がるhexファイル等が入ります。

inc

インクルードする自作のヘッダファイルを置きます。

jtag

JTAGに関するファイルの置き場です。

ld

リンカに関するファイルの置き場です。

lib

ライブラリの置き場です。

  • STM32F10x_StdPeriph_Driver
    ST Micro提供のファームウェアライブラリ
    STM32マイコン徹底入門同梱のものよりバージョンが上がったものが存在しています。置き換えてもほぼ動作しますが、bool型の定義が無くなっていますので、注意が必要です。
  • UTIL
    STM32マイコン徹底入門管理者様提供のライブラリ

  • platform_config.h
    ボード別の設定
  • stm32f10x_conf.h

src

ソースファイルを置く場所です。

makefile

ターゲットボードの設定をするファイルです。
STBeeでの基本的な設定は以下の様にします(必要に応じて変更)。

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

実際のビルドは、このペインのターゲットを実行します。プロジェクトを新規作成した時には無いので追加作成しておきます。
追加できるのは以下のターゲットです。

  • all
    全てビルドします。
  • all_clean
    ビルド済みのファイルをクリアします。
  • flash
    DFU等を使ってプログラムをターゲットに書き込みます。
  • lib
    ライブラリのみをビルドします。
  • lib_asm
    ライブラリのみをアセンブラレベルまでビルドします。
  • main
    メインプログラムのみビルドします(リンクはしません)
  • main_asm
    メインプログラムのみアセンブラレベルまでビルドします(リンクはしません)
  • main_clan
    メインプログラムのみクリアします。
  • restore_dfu
    DFUをリストアします。

    通常は(all_clean)→all→flashで書き込みが完了します。

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デバッグ

動作することは確認しましたが、まだ活用出来ておりません。フルサイズのチップでないとピンが出ていないことも難しくさせています。が、利用できると非常に便利です。


添付ファイル: fileeclipse_build.jpg 1241件 [詳細] fileeclipse.jpg 1203件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-11-08 (火) 11:46:27