ArduinoとSTM32マイコンをつないでマイコンシステム開発をしてみる その10 ~検証実験②~
マイコンシステム開発の要件定義から総合テストまでの工程をたどってみます。
題材としては、空調管理システムにします。
機材はいま手元にあるArduino1台とSTM32マイコン1台を使います。
実装に入る前に検証実験をおこないます
以下の3点をおこないます。
① STM32で計測した気温データをSPI通信でArduinoに送信。
1)STM32単体で、計測した気温データをUSB経由で端末エミュレータに出力。(前回完了)
2)SPI通信でSTM32からArduinoにテストデータを送信。
② Arduinoは気温データを受信し、LCDに表示。
③ ArduinoからSTM32に制御データを送信し、LEDを点灯。
(前回の続きです)
前回は、STM32単体で、計測した気温データをUSB経由で端末エミュレータに出力しました。今回はSPI通信でSTM32からArduinoにテストデータを送信する検証実験をします。
2.検証実験
① STM32で計測した気温データをSPI通信でArduinoに送信
1)STM32単体で、計測した気温データをUSB経由で端末エミュレータに出力。
(前回の記事をご参照ください)
2)SPI通信でSTM32からArduinoにテストデータを送信します。
・STM32マイコン設定
PA4~PA7にSPIの4本のピンの設定を行いました。
・結線します
STM32F405は3.3Vロジックで動作しますが、Arduino UNOは5Vロジックで動作します。このため、ロジックレベルを一致させる必要があります。
4ビット双方向ロジックレベル変換モジュール(AE-LCNV4-MOSFET)を間に置きました。
・検証用プログラム(STM32:送信側)
送信データ(0x55)を1秒間隔で送信します。
・検証用プログラム(Arduino:受信側)
データを受信し、シリアルモニタに出力します。
#include <SPI.h>
volatile boolean received = false;
volatile byte receivedData;
void setup() {
pinMode(SS, INPUT); // SSピンを入力モードに設定
SPI.begin(); // SPI初期化
SPCR |= _BV(SPE); // SPIスレーブ有効化
SPI.attachInterrupt(); // SPI割り込み有効化
Serial.begin(9600); // シリアル通信開始
}
// SPIデータ受信時の割り込み
ISR(SPI_STC_vect) {
receivedData = SPDR; // SPIデータレジスタから受信データ取得
received = true;
}
void loop() {
if (received) {
Serial.print("Received: ");
Serial.println(receivedData, HEX); // データを表示
received = false;
}
}
検証結果
Arduino側のシリアルモニタには何も出力されません。
すんなりとは、うまくいかないですね(汗)
次回から、トラブルシューティングをしていきます。