Nucleo-Replicaの間違い
NucleoをST-LINK部を割って別体にして使っていたが、mbedの時はそれで問題なく動いていたから疑問にも思ってなかったのだが、stm32duino(platformIOしかり)でuploadする際にどうもうまくいかないことがわかった。たまにできることもあるんだが、ずっとわからないままだった。ある時、割ってないF411を使ったところ普通にuploadして動き始めたことで、何かしら接続してない配線があるんじゃないかと思い始めた。
Nucleo-64pinのGerberと、回路図を見比べながら確認したところ、2本の接続をしていなかったことが判明。
platformIO
platformIOというのがあるらしい。Arduino-IDEでどうも書き込みがうまくいかなくて調べた結果でできたものだが(結局、ST-Linkの接続が理由だと言うのが70%ほどを占めているのだが)、stm32duinoをideにく組み込んだ後だったから、今回のようにすんなりいけるのか、不明。
stm32duinoのI2Cポート
これもGenericを選んでいるせいかもしれない。
Arduinoはwire.hで何も書かずに使用されるポートがD15,D14で決まっているようだが、Nucleoではデフォルトポートが違うようだ。
generic stm32のサンプルファイルの中にあるi2c_scanner.inoを開くと、下記のよう記述がある
I2C-1 standard pins: PB7(sda) PB6(scl)
Use it by "Wire" without pin declaration
Wire.begin();
I2C-1 alternative pins: PB9(sda) PB8(scl)
Remap the first I2C before call begin()
Wire.setSDA(PB9);
Wire.setSCL(PB8);
Wire.begin();PB6はD10に割り振られているがPB7は、外部コネクタに出ているため、そこに接続して使用したものの通信信号が出てこなかった。そこで、デフォルトに合わせるため、Wire.begin()の前に
stm32duinoのLEDポート
一番最初はD13でも動作できた記憶があるのだが、以降一度も動かない。ボードにGenericを設定しているためだろうか、そうかもしれんが、これ以外安定して書き込める方法が見つけられなかったし。
ボードにGenericを選んでいると(たぶん)、D13や13が使えずに、オリジナルポート番号を設定する必要がある。
void setup() {
pinMode(PA5,OUTPUT);
}
void loop() {
digitalWrite(PA5,1);
delay(400);
digitalWrite(PA5,0);
delay(100);
}実ポートの接続が PA5である。