CubeMXでマイコン置き換え

やりたいこと

  • CubeMXで作成したプロジェクトを別のマイコンに置き換える。
  • 例として、STM32F767からSTM32H743への置き換えるものとする。
  • 元のプロジェクトはCubeMXのプロジェクト(iocファイル)からIAR EWARMのプロジェクトを生成しているものとする。

iocファイルのインポート

  • 元のマイコンのプロジェクトフォルダは丸ごとバックアップを取っておく。
  • CubeMXを起動する。
  • [File] > [New Project] で [New Project]画面を開く。
  • [MCU/MPU Selector] タブでマイコン型番を選択する。[Series]でSTM32H7をチェックすると型番を絞りこめる。
  • [Start Project] でプロジェクトを作成する。
  • [File] > [Import Project] で元のマイコンiocファイルを選択する。

  

  • [OK] をクリックするとインポートが実行される。
  • 互換性の問題でうまくインポートできなかった箇所についてはエラーメッセージが出る。

  

  • [File] > [Save Project] で元のiocファイルのフォルダを選択して上書き保存する。

エラー箇所の修正

  • うまくインポートできなかった箇所は赤い×印が付くので適宜修正する。
  • エラーが出ていない箇所でもなぜかうまく設定がインポートできていない場合があるので、注意深くチェックする。(GPIO の Maximum output speed など)

コードの自動生成

  • [Project Manager]タブで、マイコン型番(Mcu Reference)とライブラリバージョン(Firmware Package Name and Version)を確認する。

  

  • [GENERATE CODE]をクリックするとコードとIAR EWARMのプロジェクトが自動生成される。

IAR EWARMのプロジェクトの修正

  • IAR EWARMのプロジェクトを開く。
  • [プロジェクト] > [オプション] で以下の設定を修正する。
    • [一般オプション] > [ターゲット] > [デバイス] がSTM32F767のままになっているので、STM32H743に変更する。
    • [C/C++コンパイラ] > [プリプロセッサ] > [シンボル定義] に STM32F767xx と STM32H743xx の両方の定義があるので、STM32F767xx を削除する。
    • [リンカ] > [設定] > [リンカ設定ファイル] でSTM32F767用のリンカ設定ファイルが選択されていたら、STM32H743用のものに変更する。
    • [デバッガ] > [設定] > [デバイス記述ファイル] でSTM32F767用のデバイス記述ファイルが選択されていたら、STM32H743用のものに変更する。
    • [デバッガ] > [ダウンロード] で [フラッシュローダを使用する] がチェックされていて、STM32F767用の .boardファイルが選択されていたら、STM32H743用のものに変更する。
  • スタートアップルーチンが STM32F767用(startup_stm32f767xx.s)のままになっているので、STM32H743用(startup_stm32h743xx.s)に差し替える。STM32F767用のものは実体も削除する。

  

  • STM32F7用のHALライブラリのフォルダ(STM32F7xx_HAL_Driver)が残っているので、プロジェクトから削除し、実体も削除する。
  • system_stm32f7xx.cが残っているので、プロジェクトから削除し、実体も削除する。

ソースの修正とビルド

  • stm32f7xx.h、stm32f7xx_hal.h、stm32h7xx_ll_***.h をインクルードしている箇所は、それぞれ f7 → h7 に変更する。
  • ビルドを実行する。
  • エラーが発生した箇所を適宜修正する。