こんにちは、ショウです。前回はNucleoボードを使ってLチカをするところまで進みました。
今回はシリアル通信を使ってNucleoボードとPCの通信の準備と、STM32G4に用意されているFPUの機能を使えるようにします。
CubeMXの設定
まずはシリアル通信をするピンを指定します。
前回Lチカをする時と同じように、今回もNucleoボードですでに設定されているピンを使用して通信を行いますが、現在考えている機体の設計では、別のピンから通信する予定なのでそちらの機能の設定を行います。
予定ではUSART1を使用する予定なので、ConnectivityからUSART1をクリックします。
そうするとこのような画面が出てきます。このModeのところをクリックするといくつかのモードを選択できるのですが今回はAsynchronousを選択します。Asynchronousは非同期式シリアル通信(UART)モードです。
選択すると左下にConfigurationが表示されます。ここで通信速度などの設定をすることができます。今回はそのままにしておきます。マイコンの図を見ると。PC4と5にUSART1_TXとUSART1_RXが設定されました。これでUSARTのピン設定がされたので、前回と同じようにライブラリを変更します。Project Manager>Advanced Settings>Driver SelectorにUSARTが追加されているのでLLに変更します。今回HALライブラリは使用しないので今のうちにすべての項目をLLに変更しておきます。
FPUの設定
FPU(Float Processing Unit) とはSTM32マイコンに用意されている浮動小数点演算器です。これは小数の計算などを高速で計算してくる機能なので、有効にしておきます。
CubeIDEを使ってFPUを使えるようにするにはファイルを追加する必要があります。必要なファイルは
- arm_cortexM4lf_math.lib
- libarm_cortexM4lf_math.a
の2つです。
これらは私の環境ではデフォルトで用意してくれないので、自分で事前にダウンロードされているSTM32G4のパッケージから探してきてプロジェクトのフォルダ内にコピーします。
STM32Cube\Repository\STM32Cube_FW_G4_Vxxxx\Drivers\CMSIS\LibのARMとGCCのフォルダ内にあるはずです。
同じように必要なヘッダファイルが足らないので自分でコピーします。
STM32Cube\Repository\STM32Cube_FW_G4_Vxxxx\Drivers\CMSIS\DSP\Includeの中にある
- arm_math.h
- arm_const_structs.h
- arm_common_tables.h
3つのファイルをプロジェクトのCoreの中のIncに追加します。
これで必要なファイルの移動は完了です。
CubeIDEでFPUを使えるように設定を行います。
まず、CubeIDEの(プロジェクトのプロパティ)>C/C++Build>Setting>ToolSettingsの設定を開きます。
MCU Settingsの中のUse Float with printf from newlib-nano(-u_printf_float)とUse Float with scanf from newlib-nano(-u_scanf_float)にチェックを入れます。
(scanfは今回使用しませんが、使えなくて困りたくないので入れておきます。)
チェックを入れたら今度はMCU GCC LinkerのLibrariesに移動します。
先程追加したarm_cortexM4lf_math.libとlibarm_cortexM4lf_math.aがライブラリにあたるのですが、そのままではビルド時にライブラリを読み込んでくれません。その設定をLibrariesで行います。
Librariesを開くと下の画面が開きます。
赤の四角で囲ったところをクリックして出てきた画面にarm_cortexM4lf_mathと入力します。
次はライブラリのパスを設定します。
赤の四角で囲ったところをクリックした後、Workspaceをクリックして現在使用中のプロジェクトのフォルダを選択します。
そうすると下の画面のようになります。
設定できたらApply and Closeを押してFPUの設定は完了です。
次回はUARTを使ってのシリアル通信をします。
参考URL
