STM32CubeIDEの日本語文字化け

STM32CubeIDEのサポートしている文字コードはUTF-8です。

STM32CubeIDEで作成したソースコードの日本語コメントは正常に表示されますが、他の環境で作ったソースコードを使うときに、日本語が文字化けすることがあります。
その場合はあらかじめソースコードをUTF-8に変換することで日本語を正常に表示することが出来ます。

私の場合は、元の文字コードがSJISだったのでSAKURAエディターでソースを開き、全選択して変換機能を使ってSJIS→UTF-8に変換することで対応しました。

STM32CubeIDE事始め

STM32CubEIDEについて

STマイクロエレクトロニクスから、統合開発環境TrueSTUDIOに、MCUの周辺機能を設定して自動的にライブラリを作成するSTM32CubeMXを組み込んだ無償版の開発環境STM32CubeIDEがリリースされました。

STM32CubeMXとTrueSTUDIOを統合して使い勝手をシンプルにしたというコンセプトで、STマイクロとしては今後、推奨開発環境をSTM32CubeIDE一本に絞るということです。
これまで、stm32シリーズのプログラム開発ツールとして有償無償版を含め、いくつかありましたが、今後は無償版のIDEをメーカーが本腰を入れてサポートするとアナウンスしたことは歓迎できます。

俺様開発環境のJDEからSTM32CubeIDEに移る

私はルネサスのH8、SHシリーズを使っていた時代からこれまで、GCCをベースにした自作の統合開発環境JDEを使ってきました。

JDEを作って使い続けてきた理由の一つは無償版の開発環境がなかったことです。
私の会社の顧客には教育・研究開発機関があり、ユーザーがプログラムを開発・変更出来るように開発環境を含めたシステムを提供することがあるため、高価な有償の開発環境を避けたかったことがあります。

もう一つは、私がかつてのVZエディターやDelphiのDOSIDEキーマップにこだわっているということがありました。
このキーマップは Ctrl-Sで左、Ctrl-Dで右、Ctrl-Eで上、Ctrl-Xで下にカーソルが移るDOSの時代に流行ったものです。
マウスを使わずにコードを編集したいということもありますが、このキーマップに慣れていてWindowsの標準キーマップを使うと、うっかりCtrl-Xを押してラインを消去してしまうことが頻発するためです。

STM32CubeIDEはメーカー推奨の無償版開発環境で、最新のEclipseをベースにしていて、キーのカスタマイズが自由に出来るためほぼ不満のない使い勝手となりました。

もう一つの理由として、STM32CubeIDEがOpenOCDをサポートしてくれたことがあります。
これまでMCUボードへの書き込み手段としてJtagKeyをベースにしたFT2232Dを使った書き込みボードをOpenOCDから使っていました。
この書き込みボードはJtagKeyで空いていた9,10番ピンにFT2232Dで使える仮想 COMポートのTx,Rxを割り当てて、プログラム書き込みと同時にUSBシリアル機能が使えるようにしたもので、リアルタイム制御プログラムで欠かせないシリアルモニタ機能をサポートするものです。

STM32CubeMXがリリースされたときにJDEでCubeMXを使うために、JDEにCubeMX が生成するプロジェクトをインポートする機能を追加したりもしましたが、これから発表される可能性のある新機能に対応していくのも面倒なため、この機会にSTM32CubeIDEを本格的に使い始めることにしました。

sw4stm32でOpenOCDを使う(試行錯誤編)

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を選択する。