Arduino_STM32 Blue Pill Board (BPB)Arduino_STM32 with Blue Pill Board (BPB)
Arduino_STM32を引き続き試しています。
通称Blue Pill Board (BPB)を試したので、報告します。
1.Blue Pill Boardとは
Blue Pill BoardはSTM32F103C8T6を乗せたボードです。Arduino_STM32フォーラムでは最も多く使われているボードの一つです。
Aliexpressやebayで非常に安価に入手可能です。
わたしの購入したものは、これです。一枚$2.45で、ピンヘッダーが付属しています。日本への送料も無料でした。
業者によっていくつかロット違い(バリエーション)があるようで、この記事の内容そのまま適用できない可能性があります。
(フラッシュは64K, メモリは20Kですが、搭載されているチップの異なるものもあるようです)
このページに書いてある方法は、Roger Clark氏のページ(ここ)を参考にしています。
2. 必要なもの
- Blue Pill Board (BPB)
- ST-Link V2互換アダプター
- チップ抵抗 1.5Kオーム(1608サイズ)
- Micro-USBケーブル
ブートローダの書き込みには、複数の方法があります。今回はフォーラムで標準的なST-LinkV2互換の書き込み器を試しました。
前回使ったJTAGアダプタより安価で簡単でオススメの方法です。必要なジャンパー線も付いてきます。
Aliexpressで安価に購入しました。
3. 準備
Blue Pill Boardは一部改造必要になります。
R10は10Kオームの抵抗が付いています。Arduino_STM32のブートローダを使いUSBからプログラムするために、1.5Kオームに貼り替えます。
丁寧に抵抗を剥がして、新しい抵抗を付けてください。半田ごてを2本使って、両側の端子を同時に温めるという技もあるそうです。
ロットによって異なる可能性があります。購入したボードで確認してみてください。
また、改造なしで動作する場合もあるようです。(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ピン) |
(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デバイスを確認します。
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の液晶パネルを動かしてみました。
詳しくは、また別の機会に紹介します。
(了)