CubeMXでコードを再出力する

CubeMXはMCUの煩わしい初期化コードをGUIを使って出力できる便利なツールです。main.cや必要なライブラリまで全て自動で用意してくれますから至れり尽くせりです。しかしmain.cにユーザーがコードを書き込んでから、もう一度CubeMXでコードを上書き出力すると、せっかく書いたユーザーコードは消えてしまいます。今回は書き込んだユーザーコードを消さないようにCubeMXで上書きコードを出力する方法を紹介します。

まずはCubeMXの設定の確認をします。メニューから->Setting->Code Generatorタブを選んで

Keep User Code when re-generatingにチェックマークが付いているか確認します。

(デフォルトはオンです)

※これだけではユーザーコード保護することはできません。


次にCubeMXが出力したmain.cをオープンしてください。CubeMXが吐き出したコードってやたらとコメントが多くてちょっと鬱陶しいなぁ~と思った人は多いと思います。良く見るとmain.cには

/* USER CODE BEGIN xxx */
/* USER CODE END xxx */

というコメントがやたらに沢山あります。実はここにユーザーコードを消さない為のトリックがあります。/*USER CODE BEGIN*/~/*USER CODE END*/の間に書かれたユーザーコードはCubeMXのコード再生成時にも消えずに残されるのです。

/* USER CODE BEGIN xxx*/
// ここに書かれたユーザーコードは保護される
/* USER CODE END xxx*/

このルールを守ってコードを記述すればCubeMXでペリフェラルの設定を変更->コード再出力をしてもユーザーコードを失いません。これでペリフェラルの追加や削除が容易にできるようになります。


もう一つオマケで、先ほどのメニューから->Setting->Code Generatorタブの

Generate peripheral initialization as a pair of ".c/.h" files per peripheralsにチェックマークを入れると、CubeMXはペリフェラル毎にファイルを分けて初期化コードを出力します。