STM32F103を使ってみる

開発ボードのバリエーション


STM32F1の開発ボードとしては、Black Pill/Blue Pillが有名ですが、これ以外にもたくさんの開発ボードが有ります。
こちらのボードは基板上に色々な周辺機器を実装することができます。
オンボードにはRESET-SW以外にユーザSW(PA8)が実装されています。


裏面にもTF CardやFLASHメモリーなどを実装することができます。


適当なブートローダーを書き込んでLチカしてみましたが、オンボードLEDはPA1に繋がっていました。
そこで、最終的に「generic_boot20_pa1.bin」のブートローダーを書き込んでいます。
ボードの裏側に24C02のi2c EEPROMが実装されています。
i2c-scannerでスキャンしてみましたが見つけられませんでした。



こちらのボードはmaple miniのクローンです。


裏面にSTM32F103 C8T6が実装されています。


Blue Pillとほぼ同じサイズですが、USBコネクターはMiniUSBになっています。


ピンマップはこちらに あります。
このボードにはBootセレクターのジャンパーが有りません。
ブートローダーの書き込みに関してはこちらに 参考となる記事がありました。

この記事によると、オンボードのbutボタンがBoot0に繋がっているようです。
そこで、まず初めにPB2をPullDownします。
これでBoot1がLOWになります。
この状態で、butボタンを押しながらresetボタンを押す(あるいはResetピンをトグルする)とFalsh書き込みモードになり
ブートローダの書き込みが可能となります。
ブートローダーは「maple_mini_boot20.bin」を書き込みました。
ブートローダーを書き込むときに、Flashの内容を消していいかどうかの警告が出ますが、警告を無視して書き込みます。
これでMaple Serialを認識するようになります。

Arduino-IDEで使うときは、ボードタイプに「Maple Mini」を選びます。
USB経由でスケッチを書き込むときはPB2はPullDownしていても、していなくてもOKです。
オンボードのLEDはPB1に繋がっています。
ボードタイプを「Generic STM32F103C Series」でスケッチを書き込むと、書き込みはできますが、
ブートローダーを破壊し、その後USBを認識しなくなります。


試しに「generic_boot20_pb1.bin」のブートローダーを書き込んでみましたが、USBを認識しませんでした。
ボード上にGPIOのピン番号のシルクがないので、使いずらいです。



こちらのボードはCPUにSTM32F103 RBT6が実装されています。


48PinのC8T6と比べると、64PinのRBT6のチップサイズは少し大きくなります。


STM32F103Rシリーズを使うときはポートDと実装されているメモリサイズの扱いに注意が必要です。
Arduino-IDEのボード選択で「Generic STM32F103R Series」を選ぶと、以下の4つのVariantを選択することができます。
この違いはポートDとメモリサイズの扱いです。
・STM32F103R8(64K) PD2のみ使用可能
・STM32F103RB(128K) PD2のみ使用可能
・STM32F103RC(256K) PD0 PD1 PD2が使用可能
・STM32F103RE(512K)  PD0 PD1 PD2が使用可能

このボードではPA0からPA15、PB0からPB15、PC0からPC13、PD2のポートがピンヘッダーに出ています。
STM32F103R8/STM32F103RBどちらを選んでもD2のポートは使えます。
STM32F103RC/STM32F103REを選ぶとブートローダーを破壊し、USBを認識しなくなります。



こちらのボードもCPUにSTM32F103 RBT6が実装されていますが、上のボードと違ってJTAG/SWDのMIPI-20ピンが実装されています。
SW2はパワースイッチ、LEDはパワーLED、GPIOに接続されているオンボードLEDはありません。
この手のボードにパワースイッチが実装されているのは珍しいです。
GPIOはPA0からPA15、PB0からPB15、PC0からPC15、PD0からPD2のポートがピンヘッダーに出ています。
USBはマイクロではなくミニとなっています。


裏面にはRTCバックアップ用のボタン電池(CR2102 3.3V)が入れられるようになっています。


オンボードLEDがないので、適当なブートローダを書き込みましたが、
GUIの「Flash Loader Demonstrator」ではFLASHサイズを64Kと認識しました。


CUIの「stm32flash.exe」ではFLASHサイズを128Kと認識します。


上のボードでも紹介しましたが、Arduino-IDEのボード選択で「Generic STM32F103R Series」を選ぶと、4つのVariantを選択することができます。
現在のCoreLibraryではSTM32F103RC/STM32F103REしかPD0 PD1ポートをサポートしていないので、このボードでこれらのポートは使えません。

同じ基板設計でSTM32F103RCT と STM32F103RETのボードが、色々なベンダーから供給されています。
メモリはRBT>RCT>RETなので、購入するときはしっかり値段を比較した方がいいです。



こちらのボードもCPUにSTM32F103 RBT6が実装されていますが、オンボードにRS232のポートが実装されています。




USBポートはTYPE-Bとなっています。


ものすごく巨大なボードです。
比較のためにArduinoと並べてみました。


適当なブートローダーを書き込んでLチカしてみましたが、オンボードLEDはPB9に繋がっていました。
そこで、最終的に「generic_boot20_pb9.bin」のブートローダーを書き込んでいます。

オンボードにS2 S3のスイッチがあります。それぞれPC0 PC1とGNDに繋がっています。
このスイッチ用のPullUp抵抗は実装されていないので、
pinMode(PC0, INPUT_PULLUP);
pinMode(PC1, INPUT_PULLUP);
として使う必要があります。

商品ページに
One RS232 serial port, UART1 and UART2 can be set by jumper
と記載されているのでJ4ジャンパーでUARTとRS232を切り替えできる様ですが、まだ試していません。
判明しましたら、こちらに追記します。

<追記>
RS232ポートの詳細が判明しました
オンボードにMAX3232(3-V to 5.5-V Multichannel RS-232 Line Driver)が実装されていて、STM32と以下のように接続されています。
ボード上のJ4ジャンパーでRS232と接続するポートをUART1/UART2に切り替えますが、標準のジャンパーを使うとTX-RX RX-TXの接続となり
この時点でTX/RXがクロスします。
つまり、このボードとArduinoやRaspberryとRS232通信するときはストレートケーブルを使うことになります。
クロスケーブルで接続するときはJ4ジャンパー上でクロスにする必要があります。

</追記>


こちらのボードはCPUにSTM32F103 VET6が実装されています。


上で紹介しているRBT6のボードと配置がよく似ていますが、ボードサイズが全然違います。


オンボードのLEDはpc13に繋がっています。
古いバージョンのArduino_STM32 coreでコンパイルすると以下のエラーとなります。

C:\Program Files (x86)\Arduino\hardware\Arduino_STM32-master\STM32F1\variants\generic_stm32f103v\board.cpp:168:1: error: too many initializers for 'const stm32_pin_info [79]'

 };

最新のArduino_STM32 coreを使うことでコンパイルが通ります。
GPIOは以下のポートが使えます
Aポート 0〜15
Bポート 0〜15
Cポート 0〜15
Dポート 0〜15
Eポート 0〜15

2018年7月時点で、AliでもEbayでもRBT6(上の写真の上側のボード)を購入すると、なぜかこのボードが届きます。
VET6が$12ぐらい、RBT6が$7ぐらいなので、お得といえばお得ですが、RBT6ボードが欲しくても入手することができません。


こちらのボードはCPUにSTM32F103 VCT6が実装されています。


VET6とVCT6はピンコンパチなので、VET6ボードと設計は同じです。