メインコンテンツ

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 センサー拡張ボード

利用可能なモデル

ループバック モードを使用した 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 ボードで構成されています。

  • 湿度と温度の値を結合して、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 ブロックでログに記録されたデータを観察します。

詳細