ホーム > Arduino, ARM > Arduino_STM32 Blue Pill Board (BPB)Arduino_STM32 with Blue Pill Board (BPB)

Arduino_STM32 Blue Pill Board (BPB)Arduino_STM32 with Blue Pill Board (BPB)

2016 年 2 月 14 日

Arduino_STM32を引き続き試しています。

通称Blue Pill Board (BPB)を試したので、報告します。

STM32_00

1.Blue Pill Boardとは

Blue Pill BoardはSTM32F103C8T6を乗せたボードです。Arduino_STM32フォーラムでは最も多く使われているボードの一つです。

Aliexpressやebayで非常に安価に入手可能です。

わたしの購入したものは、これです。一枚$2.45で、ピンヘッダーが付属しています。日本への送料も無料でした。

STM32_01

業者によっていくつかロット違い(バリエーション)があるようで、この記事の内容そのまま適用できない可能性があります。

(フラッシュは64K, メモリは20Kですが、搭載されているチップの異なるものもあるようです)

このページに書いてある方法は、Roger Clark氏のページ(ここ)を参考にしています。

2. 必要なもの

  • Blue Pill Board (BPB)
  • ST-Link V2互換アダプター
  • チップ抵抗  1.5Kオーム(1608サイズ)
  • Micro-USBケーブル

ブートローダの書き込みには、複数の方法があります。今回はフォーラムで標準的なST-LinkV2互換の書き込み器を試しました。

前回使ったJTAGアダプタより安価で簡単でオススメの方法です。必要なジャンパー線も付いてきます。

STM32_04

Aliexpressで安価に購入しました

3. 準備

Blue Pill Boardは一部改造必要になります。

R10は10Kオームの抵抗が付いています。Arduino_STM32のブートローダを使いUSBからプログラムするために、1.5Kオームに貼り替えます。

丁寧に抵抗を剥がして、新しい抵抗を付けてください。半田ごてを2本使って、両側の端子を同時に温めるという技もあるそうです。

STM32_02

ロットによって異なる可能性があります。購入したボードで確認してみてください。

また、改造なしで動作する場合もあるようです。(2016/07/11追記)

4. ブートローダの書き込み

STM32duino-bootloaderを書き込みます。以下は、OSXの例です。

(1) githubからプログラムをダウンロードします。

https://github.com/rogerclarkmelbourne/STM32duino-bootloader

コンパイル済みのバイナリを使います。Blue Pill Boardの場合には、以下を使います。

STM32F1/binaries/generic_boot20_pc13.bin

(2) OpenOCDをインストールしておきます。

わたしは、MacPortsを使っています。OpenOCD 0.9.0が入ります。

(3) ST-Link V2互換アダプターと基板をつなぎます

4本のみ結線します。ST-LINKアダプタは、下の段のピンを使います。

写真の線の色 ST-LINKのピン Blue Pill Board側の接続
オレンジ SWDIO IO (2ピン)
茶色 GND GND (1ピン)
SWCLK CLK (3ピン)
黄色 3.3V 3.3 (4ピン)

STM32_05

(4) OpenOCDを使って、書き込みます。

OpenOCD(サーバ)の起動


$ openocd -f /opt/local/share/openocd/scripts/interface/stlink-v2.cfg -f /opt/local/share/openocd/scripts/target/stm32f1x.cfg
Open On-Chip Debugger 0.9.0 (2015-06-03-11:38)
Licensed under GNU GPL v2
For bug reports, read
 http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'.
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 1000 kHz
adapter_nsrst_delay: 100
none separate
Info : Unable to match requested speed 1000 kHz, using 950 kHz
Info : Unable to match requested speed 1000 kHz, using 950 kHz
Info : clock speed 950 kHz
Info : STLINK v2 JTAG v17 API v2 SWIM v4 VID 0x0483 PID 0x3748
Info : using stlink api v2
Info : Target voltage: 3.327458
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints

 ※このターミナルは、作業が終わるまでそのままにしておきます。

別のターミナルから、telnetでOpenOCDに接続して書き込みを行う


$ telnet localhost 4444
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Open On-Chip Debugger
> reset halt
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
> flash write_image erase generic_boot20_pc13.bin 0x8000000
auto erase enabled
device id = 0x20036410
flash size = 64kbytes
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x2000003a msp: 0xfffffffc
wrote 7168 bytes from file generic_boot20_pc13.bin in 0.713042s (9.817 KiB/s)
> reset run

 ※書き込みは以上です。exitして終了し、アダプターをUSB端子から抜きます。

(5) ブートローダの確認

USBケーブルで、Blue Pill Boardをパソコンとつなぎます。OSXの場合には、「システム情報」のUSBデバイスを確認します。

OSX-Maple

Maple 003として認識されていれば成功です。

5. Arduinoからの書き込み

導入済みのArduino_STM32から書き込みをしてみます。(導入方法は前記事を参考にしてください)

(1) ボードの選択

以下を選択します。

ボード:”GENERIC_STM32F103R series”

Valiant: “STM32F103R8 (20kRAM, 64kFlash)

Upload method: “STM32duino bootloader”

間違えると、書き込めても正しく動作しません。

(2) プログラム

とりあえずLチカしてみます。ボードのLEDはPC13なので次のようになります。

#define LED PC13

// the setup function runs once when you press reset or power the board
void setup() {
 // initialize digital pin LED as an output.
 pinMode(LED, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
 digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)
 delay(500);              // wait for 1/2 second
 digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW
 delay(500);              // wait for 1/2 second
}

(3) 書き込み

リセットをすると、約2秒間だけ書き込みモードになりますので、タイミングよくボード側のリセットボタンを押してください。

6. ILI9341液晶のテスト

QVGAの液晶パネルを動かしてみました。

STM32_06

詳しくは、また別の機会に紹介します。

(了)

カテゴリー: Arduino, ARM タグ:
コメントは受け付けていません。