stm32duino

Nucleo-Replicaの間違い

ee9king に投稿

NucleoをST-LINK部を割って別体にして使っていたが、mbedの時はそれで問題なく動いていたから疑問にも思ってなかったのだが、stm32duino(platformIOしかり)でuploadする際にどうもうまくいかないことがわかった。たまにできることもあるんだが、ずっとわからないままだった。ある時、割ってないF411を使ったところ普通にuploadして動き始めたことで、何かしら接続してない配線があるんじゃないかと思い始めた。

Nucleo-64pinのGerberと、回路図を見比べながら確認したところ、2本の接続をしていなかったことが判明。

platformIO

ee9king に投稿

platformIOというのがあるらしい。Arduino-IDEでどうも書き込みがうまくいかなくて調べた結果でできたものだが(結局、ST-Linkの接続が理由だと言うのが70%ほどを占めているのだが)、stm32duinoをideにく組み込んだ後だったから、今回のようにすんなりいけるのか、不明。

stm32duinoのI2Cポート

ee9king に投稿

これも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ポート

ee9king に投稿

一番最初はD13でも動作できた記憶があるのだが、以降一度も動かない。ボードにGenericを設定しているためだろうか、そうかもしれんが、これ以外安定して書き込める方法が見つけられなかったし。

ボードにGenericを選んでいると(たぶん)、D13や13が使えずに、オリジナルポート番号を設定する必要がある。

void setup() {
  pinMode(PA5,OUTPUT);
}
void loop() {
  digitalWrite(PA5,1);
  delay(400);
  digitalWrite(PA5,0);
  delay(100);
}

実ポートの接続が PA5である。