5 月号付属基板開発ツールと Stmicroelectronics 社提供 のサンプル プログラム 使いこなすためのポイント江崎雅康 ARM Cortex M3 付属基板のプログラミング 要点 DWM 誌 5 月号付属基板 CQ-STARM はUSBダウンローダDFU(Device Firmware Upgrade) を搭載しています miniusbケーブル1 本でユーザプログラムの書き込みができるのが特徴です 付属 CDに収録された 2 種類の開発ツール IAR Embedded Workbench 評価版 IAR 社 RealView Microcontroller Development Kit KEIL 社およびSTmicroelectronics 社提供のライブラリ サンプル プログラムを使ってシステム開発を行うことができます しかし開発に当たっていくつか留意すべき点があります それは次の3 点です 1. USBダウンローダ (DFU) 使用のため実行ファイルのスタート番地を 0800 3000 番地にするためツールの設定が必要 (Keil 社 IAR 社 ) 2. 例外ベクタ テーブルの配置番地変更のためツールの設定 場合によってはソースファイルの書き換えが必要 (Keil 社 IAR 社 ) 3. STmicroelectronics 社のライブラリおよびサンプル プログラムは Keil 社および IAR 社のツールに対応した project の形で提供されています Keil 社の RealView Microcontroller Development Kit ではそのままコンパイルできます しかし IAR 社の IAR Embedded Workbench 用は多くがV4.22 で記述されていますので 付属 CDに収録されたV5.11 でコンパイルするとエラーが出ます この問題は適切な処置を施すことによってクリアできることを確認しました ここに紹介する内容は弊社が主宰するOJT 型開発チーム 土日システム開発部 が手分けして解析 試行した結果をまとめたものです DWM 読者の学習 開発のヒントに供するため紹介するもので その結果には責を負いかねますのでご了解ください またDWM 付属 CDに収録された開発ツールの評価版はサポート無しが条件です 開発ツール メーカに問い合わせてもサポートは得られませんのでご承知おきください STmicroelectronics 社提供のUSBサンプル プログラム Mass_Storage を使って開発ツールの使い方を実習 DWM 付属 CDで提供された Stmicroelectronics 社の USB 関連のサンプル プログラム STM32F10xUSBLib をC ドライブのフォルダ WorkSTARM にコピーしました このフォルダを STM32F10xUSBLib -> USBLib -> demos とたどっていくと5つのフォルダ Audio_Speaker Device_Firmware_Upgrade JoyStickMouse Mass_Storage Virtual_COM_Port があります このうち Device_Firmware_Upgrade はUSBダウンローダDFUのソース ファイルです このファイルを書き換えることによりUSBダウンローダをカスタマイズすることができます 例えば付属基板ではDFUモードの判定にGPIOポートBの PB9 を使っていますが これを他の入力信号線に変更することができます また標準のUSBダウンローダは8MHz 水晶振動子を実装したシステムでないと機能しませんが これを内蔵の RC 発振回路で動作するように変更することもできます 残りの4 個のフォルダにはUSBインターフェイスを使ったサンプル プログラムの project が入っています 例えば Mass_Storage -> project とたどっていくと3 社のツール EWARM (IAR Embedded Workbench) RIDE (RIDE ツール ) RVMDK (RealView Microcontroller Development Kit) に対応した project が入っています サンプル プログラムおよびライブラリの大部分は各社ツール共通に使えるように構成されています Keil 社 RealView Microcontroller Development Kit Keil 社の RealView Microcontroller Development Kit は5 月号付属 CDに収録されたV3.20b 評価版をインストールします これはDWM 誌付属基板企画向けに用意された特別評価版です 従来の評価版では 0x8003000 番地からスタートする実行
ファイルを作成することはできないため DFUファイルを作ることが不可能でした 付属基板の開発段階で筆者のチームがこのことを発見 CDプレスのギリギリの段階で Keil 社より 特別評価版 を提供していただくという経過がありました ( 現在はWEBダウンロード版も対応済 ) このツールの使い方はすでに5 月号に紹介されています しかし STmicroelectronics 社提供のサンプル プログラムをコンパイルする場合は 割り込みベクタ テーブルの 配置番地を修正する方法を少し変える必要があります μvision 3 を起動し CD からコピーした Mass_Storage の project を開くと図 1 の画面が表示されます 図 3 図 4 ここまでは本誌 5 月号の 108~109 ページの通りですが ベクタ テーブルの設定方法は少し異なります サンプル プログラムの Project Workspace に STM32_Init.c が含まれていませんので Configuration Wizard は使えま 図 1 そこで Option for target アイコンをクリックすると図 2の設定画面が開きますので 1 Target タブ選択し Read/Only Memory Area の on-chip IROM1 の Start アドレスを 0x8003000 に変更図 2 せん Project Workspace の hw_config.c をダブルクリックして図 5に示すように NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); を NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x3000); と修正します 2 Linker タブを選択し R/O Base のROMベースアドレスを 0x8003000 に変更 ( 図 3) 3 Output タブを選択し 図 4に示すように Create HEX File にマークを入れる の設定変更を行い OK をクリックします 図 5
IAR 社 IAR Embedded Workbench の場合 V4.22 からV5.11 への移行にともなう修正付属 CDの IAR Embedded Workbench 評価版はV5.11 ですが STmicroelectronics 社のサンプル プログラムはV 4.22 で記述されています IAR Embedded Workbench のV4.22 はARM Cortex M3 をサポートしていましたがV5.10 はサポートしていませんでした このため STmicroelectronics 社はサンプル プログラムをV4.22 対応で提供せざるを得なかった という事情があります stm32f10x_vector.c の修正サンプル プログラムの stm32f10x_vector.c の記述 void program_start( void ); を図 8に示すように void iar_program_start( void ); と書き換えます ソースコード中に含まれるこの他の program_start もすべて iar_program_start と書き換えます 図 6 付属 CDで提供された IAR Embedded Workbench 評価版をインストールして STmicroelectronics 社のサンプル プログラム MassStorage を開こうとすると図 6に示すメッセージが表示されます はい (Y) をクリックしてプロジェクトを開くことはできますが Project -> Rebuild All を行うと図 7に示すようにエラー メッセージが表示されます V4.22 からV5.11 の移行にともなって大きな変更 が加えられたためソースファイルの上位互換性は維持され ていないようです 図 8 図 8(a) stm32f10x_vector.c の修正サンプル プログラムの stm32f10x_vector.c の記述 #pragma location = "INTVEC" を図 8(a) に示すように 図 7 筆者の開発チームで手分けして解析 試行した結果 次の2 点の修正でビルドできることを確認しました 付属 C Dのサンプル プログラムについては動作の確認も行っています #pragma location = ".intvec" と書き換えます IAR 社 IAR Embedded Workbench のDFU 対応 スタート番地とベクタ アドレスの修正 USBダウンローダ (DFU) 対応のためプログラムの
スタート番地と割り込みベクタ アドレスを 8003000 番地に変更する必要があります 本誌 6 月号の 55 ページに IAR 社提供のサンプル プログラムについて紹介がありました このプログラムは最初からV5.11 に準拠して記述された例です ここでは筆者のチームがV4.22 に準拠して記述された STmicroelectronics 社のサンプル プログラムを動かすために行った修正を紹介します を押すと図 10 の Linker configuration file editor が開きます hw_config.c のベクタ テーブル修正サンプル プログラムの hw_config.c にあるベクタ テーブルの先頭アドレスの記述 NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); を図 9に示すように NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x3000); と修正します 図 10 まず Vector Table タブをクリックして.intvec start を 0x8003000 に設定し Save を押します 次に Memory Regions タブをクリックして図 11の設定画面を開き ROM を 0x8003000 ~ 0x801FFFF に設定 RAM を 0x20000000 ~ 0x20004FFF に設定し Save OK を押して終了します 図 9 hw_config.c のリスト 図 9(a) 修正の詳細 IAR Embedded Workbench IDE の Linker 設定変更 マウスを Workspace の MassStorageSimpleBuffer-Debug 上でクリックした後 Project Options Linker を選択して設定画面を開きます Config タブで Edit 図 11 IAR Embedded Workbench IDE の Output Convert 設 定変更
次に出力ファイルを設定します マウスを Workspace の MassStorageSimpleBuffer-Debug 上でクリックした後 Project Options Output Convert を選択して図 12の設定画面を開きます Generate additional output にチェックを入れ 1. Output format は motorola を選択 2. Output file の Override default にチェックを入れ ファイルの拡張子を *.s19 に修正します 図 12