2020年10月17日

STM32F3 FPU設定の注意点

以前にリンカライブラリ(*.lib)ファイルや静的ライブラリ(*.a)ファイル等のライブラリを追加する方法について紹介しました。その際にライブラリに合わせてFPUなしのMPUとしてビルドする設定について、STM32F3シリーズでの注意点について紹介します。

 プロジェクトファイルのプロパティを開き(Alt+Enter)、「C/C++Build」の「Settings」、「MPU Settings」内の「Floating-point ABI」を「hard」から「soft」もしくは「softfp」に切り替えます。「hard」、「soft」、「softfp」の違いは下記の通りです。

soft浮動小数点の演算に整数命令のみで構成された浮動小数点演算ライブラリ(soft-float)を使用
softfp浮動小数点の演算に浮動小数点演算命令(hard-FPU)を使用するが、floatを引数にする関数の呼び出しはsoft-floatと同じく汎用レジスタを使用
hard浮動小数点の演算に浮動小数点演算命令(hard-FPU)を使用し、floatを引数にする関数は浮動小数点レジスタを使用

softのみFPUを使用しません。一方、softfp、hardは内蔵のFPUを使用します。STM32Fシリーズの場合は「soft」を選択した場合は「Floating point hardware」を「No unit」に合わせて設定する必要があります。逆に 「softfp」、「hard」を選択した場合は「fpv4-sp-d16」のFPUを選択する必要があります。この設定をチグハグにした場合、Hard Faultが起動直後に発生し、マイコンが停止する場合があります。

FPU2.jpg

FPU1.jpg

STM32マイコンのシリーズによっては「Floating point hardware」で「fpv4-sp-d16」のFPUを選択した状態でも「soft」で動作しましたが、STM32F3シリーズではHard Faultになって正常に動作しませんでした(SW4STM32+STM32F3 V1.11.0環境)。シリーズやバージョンによっては挙動が異なるかもしれませんが、「Floating-point ABI」の設定と「Floating point hardware」の設定は合わせてした方が良さそうです。
posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする