ソフト S/PDIF トランスミッタ (15)

今回は補足的な内容について述べます。
まず、STM32CubeMX には次の開発環境、

  • IAR EWARM 6.70
  • Keil/ARM MDK-ARM 4.73
  • Atollic TrueSTUDIO 4.3.1

用のプロジェクト・ファイルを生成する機能があり、自動生成した C コードを指定した開発環境ですぐコンパイルできるようになっています。
EWARM / TrueSTUDIO については、私の PC にインストールしてあるバージョンが非常に古く (EWARM 5.30 / TrueSTUDIO 2.3.0.1) 、プロジェクト・ファイルの仕様の違いより、うまくコンパイルできませんでした。
MDK-ARM については、インストールしてあるのが V4.53.0.0 であり、「メジャー・バージョン」は「4」で一致しているのでコンパイル自体はできました。
ただし、「デバイス・データベース」には STM32F401 デバイスは含まれていません。
これについては、STM32CubeF4 ライブラリ (stm32cube_fw_f4_v100.zip および stm32cube_fw_f4_v110.zip) に同梱されている

MDK-ARM_STM32F401xE_Support_V1.0.exe

を実行すれば「デバイス・データベース」には STM32F401 デバイスが追加され、使えるようになります。
(STM32CubeF4 ライブラリ V1.2.0 および V1.3.0 には含まれていない)
このファイルは .zip ファイルを展開してできたフォルダの下の、

Utilities/MDK-ARM_STM32F401xE_Patch

フォルダの下にあります。
この追加されるデバイス名は STM32F401CE (48 ピン・デバイス) であり、Nucleo の 64 ピン・デバイスの STM32F401RE とは一致しないので、この段階ではまだ「対応デバイスなし」です。
そこで、μVision IDE のメニューバーから

File/Device Database...

と選んで開く「Select a CPU Data Base File」ダイアログで

STMicroelectronics STM32F4_512 Devices

を指定して開く編集画面で、デバイス名を「STM32F401RE」に強制的に書き換えてしまいます。
これでコンパイルできるようになりますが、できたオブジェクトを IDE からフラッシュに書き込むためには、ST-Link の設定を (手動で) 変更する必要があります。
これは自動生成される MDK-ARM 用のプロジェクト・ファイル内に記述されている ST-Link 用パラメタ値が適切でないためのようで、これは正規の V4.73 の環境でも同じだと思われます。
適切でない設定とは、

  • SWD ではなく JTAG が選ばれている
  • F401xE デバイスの 512 K フラッシュ用ではなく 1 M フラッシュ用の書き込みアルゴリズムが選択されている
  • フラッシュ書き込み後にターゲットをリセットして実行させるようになっていない

の 3 つです。
最後のリセットについては、ターゲットのリセット・ボタンを手で押さなくてすむので「便利」という程度で、「必須」ではありません。
リセットを指定すると、フラッシュ書き込み後に「リセットできない」というエラー・ダイアログが出現しますが、実際にはターゲットのリセットは行われています。
最初の 2 つに関しては、これらを正しく設定しないと全くフラッシュに書き込めません。
特にフラッシュ書き込みアルゴリズムの「設定し直し」は面倒で、すでに選ばれている 1 M フラッシュ用アルゴリズムを「Remove」し、「Add」ボタンを押して現れる他チップ用のアルゴリズムも含まれる長大なリストの中から目的の「STM32F4xx 512kB Flash」を選ばなければなりません。
(アルゴリズム選択画面でリストに入力フォーカスを当て、キーボードから「s」を入力すると「S」から始まるエントリに移動するので、スクロールを繰り返すより少しは楽になります。)
この設定し直しについては、STM32CubeMX が生成する MDK-ARM 用プロジェクト・ファイルの内容を直接に書き換えることによっても実現できます。
「.ioc」ファイルのあるフォルダの下の

Projects/MDK-ARM

フォルダにある「.uvopt」ファイルの 120 行目付近の

タグで囲まれている部分の

タグ内のオプション指定を下の表のように変更します。

変更前 変更後 備考
-O142 -O206 SWD 指定
-FF0STM32F4xx_1024 -FF0STM32F4xx_512 512 KB フラッシュ指定
-FO7 -FO15 書き込み後ターゲット・リセット