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
Lightning Brains
コメント
コメントを投稿