STMicroelectronics STM32 プロセッサ ベースのボードのための CAN または FDCAN ブロックを使用した通信
この例では、Embedded Coder® Support Package for STMicroelectronics® STM32 Processors Based Boards を使用し、CAN または FDCAN ブロックを用いて STM32 プロセッサ ベースのボードと通信する方法を示します。
この例を使用すると、次のモードで CAN プロトコル通信を実装できます。
内部ループバック モード - 内部ループバック モードで CAN/FDCAN Write ブロックと CAN/FDCAN Read ブロックを使用してデータの書き込みと読み取りを行います。
ポーリング ベース - ポーリング ベースで FDCAN プロトコルを使用して、2 つのボード間でデータ値を送受信します。
割り込みベース - 割り込みベースで FDCAN プロトコルを使用して、2 つのボード間でデータ値を送受信します。
割り込みベースおよび HTS221 センサー データ - 割り込みを使用してより高いビット レートで 8 バイトを超えるデータを送信し、温度と湿度の値を読み取ります。
クラシック CAN 割り込みベース - FDCAN と CAN 周辺装置間のクラシック CAN フレーム形式の通信。NUCLEO-L552ZE-Q からリモート フレームを受信すると、B-L475E-IOT01A2 ボードから湿度と温度の値を送信します。
はじめに
Embedded Coder Support Package for STMicroelectronics STM32 Processors により、CAN 周辺装置と STM32CubeMX ツールを使用して、プロセッサの周辺装置を構成できます。
コントローラー エリア ネットワーク (CAN) は、自動車や産業の環境で広く採用されている通信プロトコルであり、電子コントロール ユニット (ECU) 間でのリアルタイムのデータ交換を促進します。CAN は、少なくとも 2 つのノードを接続するマルチマスター シリアル バス規格として機能し、元々は車載通信用に設計されたメッセージベースのプロトコルで動作します。主な利点としては、配線の複雑度が大幅に軽減され、メッセージの競合が効果的に防止されることが挙げられます。
リアルタイムのパフォーマンスを向上させるために、クラシック CAN プロトコルの拡張として CAN FD (CAN with Flexible Data-Rate) が使用されます。1 MBit/s を超えるデータ レートと、フレームあたり 8 バイトを超えるペイロード (最大 64 データ バイト) が可能になります。
前提条件
以下のチュートリアルを完了します。
必要なハードウェア
この例を実行するには、次のハードウェアが必要です。
2 台の STMicroelectronics NUCLEO-L552ZE-Q ボード (FD-CAN 周辺装置)
STMicroelectronics B-L475E-IOT01A2 ボード (CAN 周辺装置)
2 台の CAN トランシーバー (ここでは実装時に MCP2551 を使用)
STMicroelectronics X-NUCLEO-IKS01A2 センサー拡張ボード
利用可能なモデル
stm32_fdcan_gettingstarted.slx - FDCAN の内部ループバック
stm32_can_gettingstarted.slx - CAN の内部ループバック
stm32_fdcan_polling_led_stm32l5_1.slx - FDCAN のポーリング ベース
stm32_fdcan_polling_led_stm32l5_2.slx - FDCAN のポーリング ベース
stm32_fdcan_intr_led_stm32l5_1.slx - FDCAN の割り込みベース
stm32_fdcan_intr_led_stm32l5_2.slx - FDCAN の割り込みベース
stm32_fdcan_sensor_stm32l5_1.slx - FDCAN のセンサー付きの割り込みベース
stm32_fdcan_sensor_stm32l5_2.slx - FDCAN のセンサー付きの割り込みベース
stm32_can_sensor_stm32l4disco.slx - センサー付きの FDCAN 周辺装置を使用したクラシック CAN
stm32_can_sensor_stm32l5.slx - センサー付きの FDCAN 周辺装置を使用したクラシック CAN
ループバック モードを使用した LED の点滅
このタスクでは、内部ループバック モードを使用して、FDCAN 書き込みを使用してデータ 0-7 を書き込み、FDCAN 読み取りを使用して同じデータを読み取り、値に基づいて LED を点灯させます。ボード上の LED が点灯し、1 秒間隔で変化する 0 から 7 の 2 進数が示されます。
stm32_fdcan_gettingstarted.slx モデルを開きます。このモデルは、NUCLEO-L552ZE-Q ボードで構成されています。

1. フリー ラン カウンターは、1 秒間隔で 0 から 7 の値を FDCAN Write ブロックに送信します。
2. FDCAN Write ブロックでは、[データ形式] が Raw data に、[識別子] が 1200 に、[長さ] が 1 バイトに設定されます。
3. FDCAN Read は、0.01 秒の [サンプル時間] で読み取るように構成されます。出力タイプは [パック] です。
4. 受信したメッセージは、識別子とデータ長を指定してアンパックされます。
5. 受信した値は 2 進数に変換され、Digital Write ブロックに送信されます。
6. コンフィギュレーション パラメーターで正しい COM ポートが指定されていることを確認します。
モデル コンフィギュレーション
1. [モデル化] タブを開き、"Ctrl+E" を押して [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。
2. [ハードウェア実行]、[Target Hardware Resources]、[FDCAN] に移動します。
3. 以下に示されているように、フィルター構成を有効にします。

STM32CubeMX の構成
1. [モデル化] タブを開き、"Ctrl+E" を押して [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。[ハードウェア実行]、[Target Hardware Resources]、[Build options] に移動します。
2. [Browse] をクリックします。"stm32_fdcan_gettingstarted.ioc" ファイルを参照して、[OK] をクリックします。
3. [Launch] をクリックして、IOC ファイルを開きます。
4 IOC ファイルで [Pinout & Configuration]、[Connectivity]、[FDCAN1] に移動します。
5. [Parameter Settings] で、次のパラメーターが選択されていることを確認します。
[Frame Format] が [FD mode without BitRate Switching] に設定されている。
[Mode] が [Internal Loopback mode] に設定されている。
ノミナル ボー レート 1 Mbps、データ ボー レート 2.5 Mbps になるようにビット レート パラメーターが設定されている。
メモ - [Frame Format] が [Classic mode] または [FD mode without BitRate Switching] の場合、ノミナル ビット値がボー レートの計算に使用されます。

Simulink モデルからコードを生成してハードウェア ボードに読み込む
1. モデルのコードを生成するには、Ctrl+B を押すか [ビルド、展開、起動] をクリックします。

2. モデル キャンバスの下部に示されるリンクを使用して診断ビューアーを開き、ビルド プロセスに従います。コードをボードに読み込むと、ハードウェア ボード上で LED が点滅し、コードが実行されていることを示します。
上記で説明したのと同じ手順を、"B-L475E-IOT01A2 ボード" に対して構成されている stm32_can_gettingstarted.slx モデルで繰り返して、LED の点滅を観察することができます。このモデルでは、"stm32_can_gettingstarted.ioc" ファイルを使用します。
ポーリング ベースの同期 LED 点滅
このタスクでは、FDCAN プロトコルを使用して、データ値 (0 から 7) を 1 秒ごとに 1 つのボードから別のボードに送信します。受信した値は、それぞれのボードの LED に 2 進数の値を表示するために使用されます。

フリー ラン カウンターの値 (0 から 7) を一方のボードから他方のボードに書き込む
受信した値を読み取り、値に基づいて LED を点灯させる
受信した FDCAN フレームを送り返す
受信した値を読み取り、2 つ目のボードで値に基づいて LED を点灯させる
stm32_fdcan_polling_led_stm32l5_1.slx モデルを開きます。このモデルは、NUCLEO-L552ZE-Q ボードで構成されています。

モデル コンフィギュレーション
ループバック モードのモデル コンフィギュレーションで説明されているのと同じ手順を実行します。[Auto detect board to download and run] をオフにし、リストからボードを手動で選択します。
STM32CubeMX の構成
1. [モデル化] タブを開き、"Ctrl+E" を押して [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。[ハードウェア実行]、[Target Hardware Resources]、[Build options] に移動します。
2. [Browse] をクリックします。"stm32_fdcan_polling_led_stm32l5_1.ioc" ファイルを参照して、[OK] をクリックします。
3. [Launch] をクリックして、IOC ファイルを開きます。
4 IOC ファイルで [Pinout & Configuration]、[Connectivity]、[FDCAN1] に移動します。
5. [Parameter Settings] で、次のパラメーターが選択されていることを確認します。
[Frame Format] が [FD mode without BitRate Switching] に設定されていて、[Mode] が [Normal mode] に設定されている。
ノミナル ボー レート 1 Mbps、データ ボー レート 2.5 Mbps になるようにビット レート パラメーターが設定されている。
メモ - [Frame Format] が [Classic mode] または [FD mode without BitRate Switching] の場合、ノミナル ビット値がボー レートの計算に使用されます。

Simulink モデルからコードを生成してハードウェア ボードに読み込む
1. モデルのコードを生成するには、Ctrl+B を押すか [ビルド、展開、起動] をクリックします。

2. モデル キャンバスの下部に示されるリンクを使用して診断ビューアーを開き、ビルド プロセスに従います。コードをボードに読み込むと、ハードウェア ボード上で LED が点滅し、コードが実行されていることを示します。
上記で説明したのと同じ手順を、"NUCLEO-L552ZE-Q ボード" に対して構成されている stm32_fdcan_polling_led_stm32l5_2.slx モデルで繰り返して、LED の点滅を観察することができます。このモデルでは、[データ形式] を CAN message に設定した FDCAN Write ブロックを使用し、"stm32_fdcan_polling_led_stm32l5_2.ioc" ファイルを使用します。
割り込みベースの同期 LED 点滅
このタスクでは、FDCAN プロトコルを使用して、データ値 (0 から 7) を 1 秒ごとに 1 つのボードから別のボードに送信できます。値は、割り込みを使用して受信します。受信した値は、それぞれのボードの LED に 2 進数の値を表示するために使用されます。
stm32_fdcan_intr_led_stm32l5_1.slx モデルを開きます。このモデルは、NUCLEO-L552ZE-Q ボードで構成されています。

フリー ラン カウンターは、1 秒間隔で 0 から 7 の値を FDCAN Write ブロックに送信します。
Hardware Interrupt は、FIFO0 > [Interrupt line 0] で新しい受信メッセージを受け取るために使用されています。
Function-Call Subsystem 内で、メッセージがモデルに従ってアンパックおよび処理されます。
モデル コンフィギュレーション
1. [モデル化] タブを開き、"Ctrl+E" を押して [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。
2. [ハードウェア実行]、[Target Hardware Resources]、[FDCAN] に移動します。
3. 以下に示されているように、フィルター構成を有効にします。
4. Hardware Interrupt を使用して、新しい着信メッセージを受信します。メッセージは、フィルターを通過すると、"FIFO0" に格納されます。

STM32CubeMX の構成
ループバック モードの STM32CubeMX の構成で説明されているのと同じ手順を実行します。このモデルでは、"stm32_fdcan_intr_led_stm32l5_1.ioc" ファイルを使用します。
Simulink モデルからコードを生成してハードウェア ボードに読み込む
1. モデルのコードを生成するには、Ctrl+B を押すか [ビルド、展開、起動] をクリックします。

2. モデル キャンバスの下部に示されるリンクを使用して診断ビューアーを開き、ビルド プロセスに従います。コードをボードに読み込むと、ハードウェア ボード上で LED が点滅し、コードが実行されていることを示します。
上記で説明したのと同じ手順を、"NUCLEO-L552ZE-Q ボード" に対して構成されている stm32_fdcan_intr_led_stm32l5_2.slx モデルで繰り返して、LED の点滅を観察することができます。このモデルでは、"stm32_fdcan_intr_led_stm32l5_2.ioc" ファイルを使用します。
HTS221 センサー データを使用した割り込みベースの同期 LED 点滅
このタスクでは、ビット レート切り替えを使用して、より高いビット レートで 8 バイトを超えるデータを送信できます。X-NUCLEO-IKS01A2 センサー拡張ボード上の HTS221 センサーを使用して、温度と湿度の値を読み取って送信します。
フリー ラン カウンターの値 (0 から 7) を一方のボードから他方のボードに書き込む。
FDCAN Write ブロックでビット レート切り替えを有効にする。
割り込みを使用して受信した値を読み取り、値に基づいて LED を点灯させる。受信したパケットを送り返す。
X-NUCLEO-IKS01A2 センサー拡張ボード上の HTS221 から湿度と温度の値を読み取る。
合計 16 バイトのデータ (湿度と温度でそれぞれ 8 バイト ('double' データ型)) を一方のボードから他方のボードに送信する。
湿度、温度、および LED の値を読み取る。
"監視と調整" を実行して、湿度と温度の値を取得する。

stm32_fdcan_sensor_stm32l5_1.slx モデルを開きます。このモデルは、NUCLEO-L552ZE-Q ボードで構成されています。

Hardware Interrupt ブロックを使用して、受信 FDCAN メッセージを受け取る。
Function-Call Subsystem で、I2C プロトコルを使用して湿度と温度の値を HTS221 から読み取る。
次のドキュメンテーションを参照して、値の読み取り方法や解釈方法を理解してください。
湿度と温度の値を結合して、16 バイト (各 8 バイト ('double' データ型)) のサイズの単一メッセージとして FDCAN Write ブロックに送る。
受信した LED 値は、前のタスクと同様に処理される。
モデル コンフィギュレーション
ループバック モードのモデル コンフィギュレーションで説明されているのと同じ手順を実行します。
STM32CubeMX の構成
[Parameter Settings] で、[Frame Format] パラメーターが [FD mode with Bit Rate Switching]、[Mode] パラメーターが [Normal] になっていることを確認する。
ノミナル ボー レート 1 Mbps、データ ボー レート 2.5 Mbps になるようにビット レート パラメーターが設定されている。
センサー データを読み取るために必要なため、"I2C1" も構成する。
モデルは "stm32_fdcan_sensor_stm32l5_1.ioc" ファイルで構成される。

Simulink モデルからコードを生成してハードウェア ボードに読み込む
1. モデルのコードを生成するには、Ctrl+B を押すか [ビルド、展開、起動] をクリックします。

2. モデル キャンバスの下部に示されるリンクを使用して診断ビューアーを開き、ビルド プロセスに従います。コードをボードに読み込むと、ハードウェア ボード上で LED が点滅し、コードが実行されていることを示します。
stm32_fdcan_sensor_stm32l5_2.slx モデルを開きます。このモデルは、NUCLEO-L552ZE-Q ボードで構成されています。

フリー ラン カウンターは、1 秒間隔で 0 から 7 の値を FDCAN Write ブロックに送信します。FDCAN Write ブロックではビット レート切り替えが有効になっています。
Hardware Interrupt は、FIFO0 > [Interrupt line 0] で新しい受信メッセージを受け取るために使用されています。
Function-Call Subsystem 内で、受信したメッセージは両方とも ID とデータ長を指定してアンパックされます。
湿度と温度の値はそれぞれ、Demux および Byte Unpack ブロックを使用して分離され、double データ型にアンパックされます。
表示領域で 3 つの値すべてを確認できます。
モデル コンフィギュレーション
割り込みベースの同期モードのモデル コンフィギュレーションで説明されているのと同じ手順を実行します。
STM32CubeMX の構成
割り込みベース同期モードの STM32CubeMX の構成で説明されているのと同じ手順を実行します。モデルは "stm32_fdcan_sensor_stm32l5_2.ioc" ファイルで構成されます。
モデルの実行
1. [ハードウェア] タブを開き、[監視と調整] をクリックします。
2. 診断ビューアーを使用してビルドの進行状況を追跡し、コードがターゲット ハードウェアに読み込まれて実行されるまで待機します。
3. Display ブロックでログに記録されたデータを観察します。
クラシック CAN を使用して送信された HTS221 センサー データ
このタスクでは、NUCLEO-L552ZE-Q からリモート フレームを受信したときに、B-L475E-IOT01A2 ボードから湿度と温度の値を送信することで、クラシック CAN ネットワークの例を示します。
NUCLEO-L552ZE-Q からリモート フレームを送信してセンサー データをリクエストする。
B-L475E-IOT01A2 Discovery でリモート フレームを受信すると、オンボードの HTS221 センサーを使用して湿度と温度を読み取ってキャリブレーションする。
湿度と温度の値を NUCLEO-L552ZE-Q に送信する。
エクスターナル モードを使用して NUCLEO-L552ZE-Q を実行し、スコープで受信した値を確認する。

stm32_can_sensor_stm32l4disco.slx モデルを開きます。このモデルは、B-L475E-IOT01A2 ボードで構成されています。

Hardware Interrupt ブロックを使用して、受信 CAN メッセージを受け取ります。Function-Call Subsystem で、Humidity サブシステムと温度が読み取られ、長さ 8 バイトの 2 つの CAN パケットとして送信されます。
モデル コンフィギュレーション
1. [モデル化] タブを開き、"Ctrl+E" を押して [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。
2. [ハードウェア実行]、[Target Hardware Resources]、[CAN] に移動します。
3. 以下に示されているように、フィルター構成を有効にします。

STM32CubeMX の構成
モデル コンフィギュレーションの IOC ファイルとして [stm32_can_sensor_stm32l4disco.ioc] を選択する。
CAN は 1 Mbps のボー レートに構成する。
センサー データを読み取るために必要なため、I2C2 も構成する。

Simulink モデルからコードを生成してハードウェア ボードに読み込む
1. モデルのコードを生成するには、Ctrl+B を押すか [ビルド、展開、起動] をクリックします。

2. モデル キャンバスの下部に示されるリンクを使用して診断ビューアーを開き、ビルド プロセスに従います。コードをボードに読み込むと、ハードウェア ボード上で LED が点滅し、コードが実行されていることを示します。
stm32_can_sensor_stm32l5.slx モデルを開きます。このモデルは、NUCLEO-L552ZE-Q ボードで構成されています。

FDCAN Write ブロックを使用して、B-L475E-IOT01A2 ボードにリモート (リクエスト) フレームを送信する。
データ
0を FDCAN Write ブロックに送る。CAN メッセージでは長さの指定が必須である。ただし、リモート フレームにはデータ フィールドがないため、データは CAN フレームでは送信されない。受信割り込みを受信すると、次のようになる。メッセージがアンパックされ、Byte Unpack を使用して double データ型に変換される。
Display/Scope ブロックを使用して、受信した温度と湿度の値を確認できる。
モデル コンフィギュレーション
ポーリング ベース同期モードのモデル コンフィギュレーションで説明されているのと同じ手順を実行します。
STM32CubeMX の構成
[Classic mode] を選択し、1 Mbps のボー レートが得られるようにビット値を設定します。データ ビット値はクラシック CAN では使用されません。このモデルは "stm32_can_sensor_stm32l5.ioc" ファイルで構成されます。

モデル コンフィギュレーションで適切な COM ポートが指定されていることを確認します。
モデルの実行
1. [ハードウェア] タブを開き、[監視と調整] をクリックします。
2. 診断ビューアーを使用してビルドの進行状況を追跡し、コードがターゲット ハードウェアに読み込まれて実行されるまで待機します。モデルをエクスターナル モードで 10 秒間実行します。
3. Display ブロックでログに記録されたデータを観察します。