LoginSignup
10
7

More than 1 year has passed since last update.

STM32 を Arduino 開発環境で使う場合のシリアルポートの調査 (STM32duino + STM32F103C8 : Blue Pill)

Last updated at Posted at 2017-09-22

BluePillのシリアルポート

http://wiki.stm32duino.com/images/a/ae/Bluepillpinout.gif
Bluepillpinout.gif

この図によると、

PIN NAME USART
PA9 TX1
PA10 RX1
PB6 TX1
PB7 RX1
PA2 TX2
PA3 RX2
PB10 TX3
PB11 RX3

はて?

TX1とRX1が2つありますね。

そういえば、Arduino開発環境(STM32duino)上ではUSBポートが仮想シリアルポートになっていてシリアルモニターなども使えるようになっていますね。ソフトウェアシリアルとの兼ね合いも含め、そこらへんどうなるのか調べてみました。

STM32duinoでのSerialオブジェクト

こんな感じのプログラムで調べてみました。


void setup(){
  Serial.begin(19200);
  while (!Serial.isConnected()) delay(100);
  Serial.println("Serial port");
}

...

これがどこに出力されるかは、 Upload Method によって異なりました。

Upload Method Serialオブジェクトの出力先 Upload接続先(Blue Pill上の物理ポート) Upload接続に使用したハードウェア Linux上のデバイス
STM32duino bootloader Blue Pill 上のmicroUSBコネクタ Blue Pill 上のmicroUSBコネクタ Micro USB ケーブル /dev/ttyACM0 (Maple Mini)
Serial PA9 TX1 PA10 RX1 PA9 TX1 PA10 RX1 秋月電子「FT232RQ USBシリアル変換キットシリアルアダプタ」
STLink Blue Pill 上のmicroUSBコネクタ SWD(シリアルワイヤデバッグ)ポート ST-LINK/V2(の多分パチモン)

Serial1,Serial2,Serial3

ハードウェアシリアルポートが沢山ありますが、それはどこにつながっているか?

USBブートローダーから書いた場合およびST-Linkで書いた場合

PinName Signal Serial Object
PA9 TX1 Serial1
PA10 RX1 Serial1
PB6 TX1
PB7 RX1
PA2 TX2 Serial2
PA3 RX2 Serial2
PB10 TX3 Serial3
PB11 RX3 Serial3

TX1とRX1にUSBシリアルをつなげて書いた場合

PinName Signal Serial Object
PA9 TX1 Serial
PA10 RX1 Serial
PB6 TX1
PB7 RX1
PA2 TX2 Serial1
PA3 RX2 Serial1
PB10 TX3 Serial2
PB11 RX3 Serial2

うーむ、USBによる仮想シリアルポートが使えるときはそれがSerialオブジェクトに、そうでなければUSART1がSerialオブジェクトになり、それぞれで番号がずれるみたいですね。

ちなみにTX1とRX1にUSBシリアルをつなげて書いた場合、Serial3を指定するとエラーとなりました。

STM32F103チップのシリアルポート

ところで、上の図のPB6,PB7にあるTX1、RX1とは何でしょう?

データシートを見てみました。
http://www.st.com/content/st_com/ja/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32-mainstream-mcus/stm32f1-series/stm32f103/stm32f103c8.html

これによると、STM32F103CxのUSARTは3つある。

PIN名 USART Default/Remap
PA9 USART1_TX Default
PA10 USART1_RX Default
PB6 USART1_TX Remap
PB7 USART1_RX Remap
PA2 USART2_TX Remap
PA3 USART2_RX Remap
PA10 USART3_TX Remap
PA11 USART3_RX Remap

ということで、ソフトウェアの指定によってUSART1はPA9/PA10からPB6/PB7にリマップできるそうです。
まだ調べてませんが、Arduino開発環境でもそういった設定ができるのかも知れませんね。

STM32duino の仮想シリアルポート

AVRを使ったArduino開発環境では、割と仮想シリアルポートが自由に使えるのでSTM32duinoでも使えるのかと思ってましたが


#include <SoftwareSerial.h>

とするとエラーが出ました。

http://www.stm32duino.com/viewtopic.php?f=13&t=6
こういった議論や開発もされているようですが、少なくとも STM32duino の本家である

ではソフトウェアシリアルは使えないようです。

10
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7