stmicroが提供するフリーで制限の無いstm32マイコン用開発環境がかなり使えます。
今までstm32f シリーズの開発に自作の開発環境JDEを使ってきました。
何度かFreeで制限のない開発環境を探したことがあり、eclipseにも挑戦したことがありますがセットアップが複雑で動きがもっさりしているので仕方なくJDEをバージョンアップしながら使い続けてきました。
今回STマイコンの開発環境にSTマイコン用システムワークベンチのsw4stm32を使いたいというお話があったのでインストールして触ってみたところなかなか使えそうなのでこれからsw4stm32にシフトして行こうと思っています。
インストールからコンパイルまでは簡単に出来ましたがOpenOCDを使った書き込みは苦労しました。
自作の書き込みツールoocdJTAGを使って、JDEではサポートしていなかったブレークポイントとステップ実行を使ったデバッグが出来るところまで確認しました。
デバッグ後にターゲットボードからoocdJTAGを外してリセットすれば普通にプログラムが走ります。
デバッグシンボル等を含んでいるのでプログラムサイズが大きく実行速度にも影響があると思いますが、とりあえずはFlashへの書き込みが出来たことになります。
Relase モードでコンパイルしたプログラムをFlashへ書き込む手順についてはまだ模索中です。
sw4stm32の良い点
1.コードサイズの制限などが無くGCCの機能をフルに使える。
2.ショートカットキーの割り当てが簡単(私的にはこれが必須条件です。)
3.OpenOCDでデバッガも使える。
4.その他IDEに必要な機能が網羅されている(らしく見えます)
sw4stm32の悪い点
1.eclipseベースなので柔軟に拡張が出来る反面、構成が複雑でわかりにくい。
使い方について検索しても現バージョンとは異なる手順ばかりが見つかる。
2.今後も、OpenOCDのサポートなどバージョンアップの度にやり方が変わると思われるので初心者が使い始める手順書を作るのが困難。
OpenOCDを使うための設定
Google先生に聞いたところでは別途OpenOCDをインストールして使いなさいとのことでしたが、ダウンロードしたバージョンにはOpenOCDが入っていました。
設定のためにはOpenOCDの実行ファイルやスクリプトの場所を知らなければならないのですがややこしいディレクトリ校正になっていてわかりにくいのでメモ
OpenOCDがインストールされている場所
メニューの Windows -> Preference から
C/C++
Build
Build Variables のページで Show system variables にチェックを入れると定義済みの環境変数が表示されます。
<ECLIPSE DYNAMIC VARIABLE>と表示されている項目はその項目をダブルクリックするか選択して右のEditボタンをクリックすると別ウィンドウが開いて表示されます。

下記の値は install_sw4stm32_win_64bits-v2.4 の場合です。
バージョンが違うと変更になると思います。
環境変数openstm32_openocd_script_pathの値 : stmicroボードの定義が置いてある場所
Ac6\SystemWorkbench\plugins\fr.ac6.mcu.debug_2.1.4.201801121207\resources\openocd\scripts\st_board
環境変数openstm32_openocd_legacy_script_root_pathの値 : OpenOCDスクリプトの場所
Ac6\SystemWorkbench\plugins\fr.ac6.mcu.debug_2.1.4.201801121207\resources\openocd\scripts\
環境変数openstm32_openocd_pathの値: openocd.exeがある所
Ac6\SystemWorkbench\plugins\fr.ac6.mcu.externaltools.openocd.win32_1.17.0.201801121207\tools\openocd\bin
環境変数openstm32_openocd_script_root_pathの値: ??
Ac6\SystemWorkbench\plugins\fr.ac6.mcu.debug_2.1.4.201801121207\resources\openocd\st_scripts
コマンドラインオプションで環境変数を認識しないバグ??
Run -> Debug Configuration でopenOCDのコマンドラインオプションに環境変数を使うとファイルの場所を認識してくれなくて暫く悩みました。
この画面で <OpenOCD Options> のところ
環境変数を使わずにOpenOCD Optionsを指定するとちゃんと動作したのでたぶんコマンドラインの解釈時に環境変数の認識をしていなのでしょう。
ここでつまづいた人は環境変数を使わないようにするとうまくいきます。
この問題を解決する過程で最新のOpenOCDを別の場所にインストールしてシステム環境変数も変更して、それを元に戻すのが面倒なので新しいOpenOCDを使っていますがインストール済みのOpenOCDでも動作は問題ないような気がします。
JSD製oocdJTAGボードを使う場合
メニュー Run -> Debug Configurations で直接OpenOCDを設定するとOpenOCDが起動しますがどうやってもエラーでうまくいかなかったので
メニュー Run -> External Tools -> External Tools Configurations で OpenOCDを外部ツールとして設定するとデバッグまで出来ました。
フラッシュ書き込みはもう一工夫必要みたいです。
Debug Releaseの切り替え
メニュー Project -> Builed Configurations -> Set Active から Debug/Releaseを選択する。