EclipseによるSTM32統合開発環境構築~その7

Eclipse環境での開発


いよいよ、このSTM32 Eclipse開発環境構築も今回が最終回です。

インストールは一通り終わりましたので、実際にプログラム作成しながら設定も行っていきたいと思います。
ここまでのドキュメントはインストールパートごとにページを作成しましたが、ココからは一気にLチカのサンプルプログラムを実装、デバッグ、動作までやってみたいと思います。

なお、このサンプルでは、STM32F3 Discoveryボードを使用して実際にLED点滅まで実装します。



ボードの情報については下記を参照してください。
 → STMicroelectronicsのページ


プロジェクトを作る

先ず、プロジェクトをSTM32 CubeMXで作成しますが、STM32 CubeMXをEclipseのパースペクティブとして起動します。

Eclipseのメニューから[ウインドウ] → [パースペクティブ] → [パースペクティブを開く] →[その他]を選択します。
起動可能なパースペクティブの一覧が表示されるので、
STM32CubeMXを選択して開きます。

STM32 CubeMXをパースペクティブとして開いた状態

STM32 CubeMXがEclipseのパースペクティブとして開きます。UIは単体でSTM32 CubeMXを起動したときと同様です。

閉じるには、STM32 CubeMXがパースペクティブとして開いている状態で、Eclipseメニューから[ウインドウ] → [パースペクティブ] → [パースペクティブを閉じる]を選択します。

今回使用するボードはSTM32F3 Discoveryボードなので、STM32 CubeMXのホーム画面の[ACCESS TO BOARD SELECTOR]ボタンを押してボードの選定画面を表示してください。

ボード選択のダイアログが表示されますので、下記のように使っているボードを絞り込みます。
Vendor → STMicroerectronics
Board → Discovery
MCU → STM32F3

選択状況でボードが絞り込まれるので、今回使うSTM32F3 Discoveryの”Mounted Device”を選択して、[START PROJECT]を実行します。

画面が切り替わり、CPUのPIN設定画面に切り替わります。
この、CPU表示で設定したいPINをクリックすると、設定可能なPIN設定が表示されます。

今回使うSTM32F3 Discoveryボードは、8つのLEDを持っているので対応する8つのPINをGPIO Outputに設定します。


この画面では、GPIOの他にUARTやI2C、SPIなどの通信系の設定や、ADCなどのアナログ系の設定、その他にMiddlewareとしてFreeRTOSなどの設定が可能です。

プロジェクトの設定は、Project Managerタブで設定します。
まず、プロジェクトの名前をつけましょう。ココでは、”DebugSample”としました。
Toolchain Folder Locationに、Workspaceで指定したフォルダ以下が設定されていればOKです。

このタブで気を付けなければいけない所が、Toolchain/IDEです。
ココは下記のように設定してください。
プルダウンメニューから、”SW4STM32”を選択
Genarate Under Root のチェックは外します。

他にもクロックの設定タブがあります。
タイマーを使う時は要注意です。

一通りPIN設定やプロジェクト設定が終わったら、[GENARATE CODE] を押してコード生成を行います。

プロジェクトファイルやスケルトンコードの出力が完了すると、ダイアログが表示されて”プロジェクトを開く”か聞いてくるのでプロジェクトを開くを選択して、STM32 CubeMXパースペクティブを閉じるか、デバッグパースペクティブなどに切り替えてください。


ビルドが通るか確認

まずは、CubeMXが出力したコードがビルドできるか確認してください。
コード的にはピンアサインだけ行って何もしないコードですが、ビルドができればSTM32 CubeMXとEclipse、それとコンパイラの連携が正しくできていることが確認できます。

ちなみに、書き込むためのバイナリファイルのフォーマットはインテルHexフォーマットです。

その後、LEDを点滅させるため下記のコードを追加しました。

while (1) {
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_9);
HAL_Delay(100);
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_9);
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_10);
HAL_Delay(100);
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_10);
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_11);
HAL_Delay(100);
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_11);
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_12);
HAL_Delay(100);
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_12);
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_13);
HAL_Delay(100);
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_13);
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_14);
HAL_Delay(100);
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_14);
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_15);
HAL_Delay(100);
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_15);
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_8);
HAL_Delay(100);
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_8);
}

単純に、main()のメインループで8つのLEDをぐるぐる回しているコードです。


OpenOCD設定

ビルドまで完了できたら、今度は実機であるSTM32FD3 Discoveryのフラッシュに書き込みを行いたいと思います。

STM32のフラッシュに書き込むには、OpenOCDがST-Link経由でアクセスを行うことでCPUのフラッシュに書き込むことができます。

EclipseからOpenOCDを利用するためには、Eclipseの外部ツールとしてOpenOCDの構成が必要となります。

Ecripseのメニュから「実行」→「外部ツールの構成」を選択します。
ダイアログが開くので左側のツリーから「プログラム」を選択し、「新規の起動構成」アイコンを押します。


外部ツールの構成

「プログラム」の下に「新規構成」が作成され、右側が入力欄となりますので下記を設定してください。
・メインタブ
名前 → OpenOCD
ロケーション → ${openstm32_openocd_path}\openocd.exe
作業ディレクトリー → ${openstm32_resources_path}\scripts
引数に下記を設定
-s ${openstm32_resources_path}\scripts -f board/stm32f3discovery.cfg
・共通タブ
お気に入りのメニューに表示にチェック
・「適用」「閉じる」
・外部ツールの実行アイコンの横の▼を押して、先程設定したOpenOCDが表示されればOKです。

引数で”-f biard/...”の所は今回使うSTM32F3 Discoveryのボード情報を設定していますが、他の評価ボードを使う場合は書き換えてください。
例えば、STM32F401 Nucleo64の場合は、”st_nucleo_f401re.cfg”となります。
ボードの設定ファイルの実態は、以下にありますので利用するボードの設定ファイルを確認して設定してください。
C:\pleiades\eclipse\plugins\fr.ac6.mcu.debug_2.3.1.201811131241\resources\openocd\scripts\board

※ディレクトリ名称は執筆時点の名称であるため、バージョンアップ等での変更があり得ます。このため、インストール状況に応じて適宜読み替えてください。


デバッグの構成

デバッグ対象を設定し、先程ビルドしたプログラムのデバッグを可能とします。
また、デバッガーとしてGDBと先程のOpenOCDを連携させて動作するようにします。
Eclipseのメニュから「実行」→「デバッグの構成」を選択します。

デバッグの構成

左側のツリーからAc6 STM32 Debuggingを選択、「新規の起動構成」アイコンを押します。

・「プログラム」の下に「新規構成」が作成され、右側が入力欄となる
・メインタブ
名前 → プロジェクト名
プロジェクトの検索ボタンを押下、プロジェクト名.elfを選択してOK
・デバッガー
GDB Command が下記の状態であればOK
${openstm32_compiler_path}\arm-none-eabi-gdb
OpenOCD Command
"${openstm32_openocd_path}\openocd.exe"
ポート番号
3333
・共通タブ
お気に入りのメニューに表示にチェック
・「適用」「閉じる」
・デバッグアイコンの横の▼を押して、先程設定した名前が表示されればOK


パスの解決

外部ツールの構成とデバッグの構成で”${openstm32_XXXXXX}”のような表現がありました。
まだ、これらの具体的なパスが解決されていないので、パスを解決する必要があります。
Eclipseのメニューから「ウインドウ」→「設定」を選択します。
設定ダイアログが表示されるので、左側のツリーから「実行/デバッグ」→「ストリング置換」を探して、選択します。

ストリング置き換え

ストリング置き換えに以下を追加します。

openstm32_openocd_path =
C:\pleiades\eclipse\plugins\fr.ac6.mcu.externaltools.openocd.win32_1.21.0.201811131241\tools\openocd\bin
openstm32_resources_path =
C:\pleiades\eclipse\plugins\fr.ac6.mcu.debug_2.3.1.201811131241\resources\openocd
openstm32_compiler_path =
C:\pleiades\eclipse\plugins\fr.ac6.mcu.externaltools.arm-none.win32_1.17.0.201812190825\tools\compiler\bin

設定したら、[適用して閉じる]ボタンを押してください。

※ディレクトリ名称は執筆時点の名称であるため、バージョンアップ等での変更があり得ます。このため、インストール状況に応じて適宜読み替えてください。


デバッグ/実行

やっと、EclipseとデバッガーやOpenOCDとの関係が確立され、実機(STM32)を使った動作が可能になりました。
実機への書き込み、デバッグの手順について説明します。

 ・先ず、外部ツールの実行からOpenOCDを起動する
  → ST-Linkが接続できたかLEDで確認(Red←→Green点滅となればOK)
 ・デバッグ起動する
  デバッグ・パースペクティブに切り替わる
  main()の先頭でデバッガにより停止すればOK
  実行、ステップ実行など可能です。

デバッグ中は、デバッグ停止→ソース更新→ソースセーブ→ビルド→デバッグの繰り返しになります。

同様に、デバッグ終了時は以下の手順で終わらせます。

 ・デバッグ中ののプログラムを停止する
 ・OpenOCDを停止する
  デバッグ作業をやめるときなど、OpenOCDを停止してください。
  いきなりEclipseを停止すると、OpenOCDのプロセスが生きたままになったりします。

2019/03/30追記:
一度、OpenOCD接続が確認できたら、次回以降はイキナリのデバッガ起動でOKな感じです!

※手順を間違えると繋がらなくなったりします。
※プロジェクトを切り替えたい場合、再接続がうまくいかないことがあります。
トラブルシューティングを参考にしてください。


最後に。。。

やはり、フリーのツールを自分で組み合わせて使うため少し?クセがある環境です。
しかし、コードサイズや試用期間の制限がなく、ボードの性能をフルに使うことができる、ということは大きな魅力であると感じています。






Let's Happy Hacking!!
Lightning Brains 

コメント

このブログの人気の投稿

Linuxシステムコール、共有メモリの使い方

Linuxシステムコール、メッセージキューの使い方

Linuxシステムコール、セマフォの使い方