Nucleo L432KCは、小型高性能だが、ピン数が30ピンと少ないので、SPI,I2C,HardFlowSerialを詰め込むにもピンに自由度は一切ありませんでした。
●L432KCのピンの決め方
DATASHEETをみて、デフォルトで指定されている表を見ながら
使うIFのピン同士でコンフリクトしないように配置します。
L432KCの場合、SPIとI2CとHardwareFlowSerialの組み合わせは
1通りしかありませんでした。
●上記を決めるためには、マニュアルは、https://www.st.com/resource/en/datasheet/stm32l432kc.pdf
ここで参照する表のあるページは、55,56ページです。
ピンにいろいろな機能を使えるようになっているのですが、同じ名前が何か所かのピンに書いてあるので、組み合わせがどうなっているのかは、データシートの表をみないとわからないので、簡単にはピンセットが決められなくて大変面倒です。STM32を使うには、Pinout and Pin descriptionを
よく見ないといけないということです。高機能でいろいろあると大変です。
Arduinoのように単純ではありませんが、Arduinoでは逆立ちしても
出来ないことが出来てしまうのでしょうがありません。
以前は、Defaultと書いてあったのですが、Alternate functionがデフォルト
のピン定義みたいです。ここで、使いたいIFのピン同士が干渉しないように決めます。
●ブレッドボードで確認
切った張ったが多くなるので、ブレッドボードで、HardwareFlowSerialとI2Cのそれぞれの動作と組み合わせた動作をチェックしました。ハードウェアフロー制御については、詳細に検証しましたので、次の記事で報告します。
①シリアル通信は、2個のL432KC間で通信実験をします。Xbeeは、別途実験します。
➁I2CはQMC5833Lのライブラリーを使って、シリアル通信と組み合わせて動作チェックします。
③両者のピン同士が干渉しないかどうかを見るのが目的です。
テストプログラム 送信側CPU上
#include “mbed.h” #include “QMC5883L.h” QMC5883L qmc; //I2C i2c(PB_7,PB_6); DigitalOut myled(LED1); Serial pc(USBTX,USBRX); Serial xbee(PA_9,PA_10);//TX RX int n=0; char c; int main() { pc.baud(115200); xbee.baud(115200); xbee.set_flow_control(Serial :: RTSCTS,PA_12,PA_11);//rts、cts qmc.init(); pc.printf(“SetOK\n\r”); while(1) { int mgx=qmc.getMagXvalue(); int mgy=qmc.getMagYvalue(); int mgz=qmc.getMagZvalue(); myled=1; wait_ms(10); myled=0; pc.printf(“mgx=%d,mgy=%d,mgz=%d\n\r”,mgx,mgy,mgz); xbee.printf(“%d,%d,%d\n\r”,mgx,mgy,mgz);/*Basic serial RTSCTS test c=0x31; pc.putc(c); xbee.putc(c); wait_us(100); */} } |
受信側プログラム 下CPU
#include “mbed.h”
DigitalOut myled(LED1); |
●以後
実際の基板で配線しなおして、SPIピンとの干渉を調べてm最後Xbeeとの速度とデータ落ち信頼性を試験します。