2016/06/11

Nucleo-F103RB を Arduino IDE から使う

ST micro の Nucleo-F103RB (http://akizukidenshi.com/catalog/g/gM-07724/ )は開発環境に mbed が使えます。Arduino IDE (1.6.9)についても、次のような方法で使えました(F103RB以外のボードは今のところ使えないようです)。

まず、開発している Roger さんの書いている文章(https://github.com/rogerclarkmelbourne/Arduino_STM32/wiki の Installation)にしたがって、Arduino Due 用のコンパイラを入れて、hardware フォルダにファイルを展開します。

MacOS Xの場合、dfu-util は入っているからインストールが要らないとありますが、libusb 周りが不足するので、Homebrew から dfu-util をインストールするといいと思います。

それで Nucleo の開発はできるはずなのですが、ちょっと気になるところがありました。一つはシリアルポートです。Serial でなくて Serial1 を使わないとPC(Mac)のUSB側と通信できません。Serial を使いたいときはSTM32F1/variants/nucleo_f103rb/board.cppを次のように書き換えます。

--- board.cpp.orig 2016-06-07 21:11:32.000000000 +0900
+++ board.cpp 2016-06-10 17:43:40.000000000 +0900
@@ -253,7 +253,7 @@
    DEFINE_HWSERIAL(Serial2, 2);
    DEFINE_HWSERIAL(Serial3, 3);
 #else
-   DEFINE_HWSERIAL(Serial, 3);// Use HW Serial 2 as "Serial"
-   DEFINE_HWSERIAL(Serial1, 2);
+   DEFINE_HWSERIAL(Serial, 2);// Use HW Serial 2 as "Serial"
+   DEFINE_HWSERIAL(Serial1, 3);
    DEFINE_HWSERIAL(Serial2, 1);
-#endif
\ No newline at end of file
+#endif

この変更をしても TX/RX(D1/D0)ピンに信号が出ていないようです。Serial(上記の変更したときはSerial1)はPC10/PC11 のピンで TX/RX で使えるようです。
-------------------------------------------------------------------------------------------------
マニュアルを見るとデフォルトでは

  • USART2(PA2, PA3)はST-LINK MCUに接続(SB13, SB14をショートしてSB62, SB63をオープン)

になっていて、

  • USART2(PA2, PA3)をCN9のTX/D1, RX/D0ピンに接続するには SB13, SB14 をカットして、SB62, SB63をショート

だそうです。USART3 (PC10: TX, PC11: RX) を CN10 の 35, 37 につないで、こちらをD0, D1ピンに出した方がよいのかもしれません。
-------------------------------------------------------------------------------------------------

それから I2C についても、Wire が使えません。これは
TwoWire Wire1(PB8, PB9, SOFT_STANDARD);
として Wire1 を宣言してWire1を使うか、STM32F1/libraries/Wire/Wire.cppとSTM32F1/variants/nucleo_f103rb/board/board.hを次のように書き換えます。

--- Wire.cpp.orig 2016-06-07 21:11:32.000000000 +0900
+++ Wire.cpp 2016-06-10 17:42:26.000000000 +0900
@@ -191,4 +191,4 @@
 
 // Declare the instance that the users of the library can use
 //TwoWire Wire(SCL, SDA, SOFT_STANDARD);
-TwoWire Wire(PB6, PB7, SOFT_STANDARD);
+TwoWire Wire(BOARD_I2CSOFT_SCL_PIN, BOARD_I2CSOFT_SDA_PIN, SOFT_STANDARD);
--- board.h.orig 2016-06-07 21:11:32.000000000 +0900
+++ board.h 2016-06-10 17:39:43.000000000 +0900
@@ -51,8 +51,8 @@
 #define A4 20
 #define A5 21
 // Wire.h Soft I2C standard pins for custom boards:
- #define BOARD_I2CSOFT_SCL_PIN     PC0
- #define BOARD_I2CSOFT_SDA_PIN     PC1
+ #define BOARD_I2CSOFT_SCL_PIN     PB8
+ #define BOARD_I2CSOFT_SDA_PIN     PB9
 
 #define BOARD_NR_USARTS         3
 //#define SERIAL_ORDER1     3 // HW Serial order for custom boards