HaLake Magazine

コワーキングスペースHaLakeの技術情報発信サイト!IoT,AR,VRなど最新技術情報をお届け!

nRF52832をST-LINK v2 + PlatformIOで開発する

今回は『ST-LINK v2』と『PlatformIO』を使って『nRF52832』を開発手順をブログにしていきます. 今回ブログにしようとしたきっかけとして、『PlatformIO』で『nRF52832』を『ST-LINK v2』で開発しようとした際プログラムを書き込める様にはなったもののLチカができず、原因解明に半日を費やしたため共有しようと思ったためです。

学べること

  • ST-LINK v2 + PlatformIO + nRF52832の開発環境
  • platformio.ini(PlatformIOの設定ファイル)での設定

前提準備と注意

今回使用するもの

『nRF52832』は『MDBT42Q』というモジュールに搭載されているBLEチップです。 『MDBT42Q』モジュール単体はSwitch Scienceにて購入できます。

www.switch-science.com

しかし『MDBT42Q』を開発する際非常に高度で繊細な半田付け技術を要するので、今回の開発にはI/Oが使いやすい大きさになって同モジュールを搭載した『Adafruit Feather nRF52 Bluefruit LE』を使用していきます。

www.switch-science.com

Adafruit Feather nRF52 Bluefruit LEの加工

『Adafruit Feather nRF52 Bluefruit LE』は付属のUSB端子から書き込みができる様になっていますが、『ST-LINK v2』を使う場合はボード中央部の半田付けされていない部分を使います。 この部分から必要なピンから線を出して『ST-LINK v2』に接続できる様にします。 今回使うピン配列は以下の様になります。

f:id:takumishinoda:20190324121253j:plain
書き込みピンの配列

このピンから『ST-LINK v2』から書き込むための線を半田付けしていきます。 実際に半田付けした写真も用意しました。

f:id:takumishinoda:20190324121812j:plain
半田付け後


配線

f:id:takumishinoda:20190324133446j:plain

必要な線が出せたので、実際に書き込むための配線をしていきます。

ST-LINK v2 Adafruit Feather nRF52 Bluefruit LE
3.3V 3.3V
GND GND
SWDIO SWDIO
SWCLK SWCLK

これで配線は終了です.

PlatformIOでの準備

『PLatformIO』ではいつも通りpio initplatformio.iniを生成しますが、この時ボードは『nrf52_dk』を指定するので、コマンドでpio init -b nrf52_dkを実行します。 すると、生成されたplatformio.iniの内容は以下の様になると思います。

[env:nrf52_dk]
platform = nordicnrf52
board = nrf52_dk
framework = arduino

ここに今回は『ST-LINK v2』で書き込むので以下の様に追記します。

[env:nrf52_dk]
platform = nordicnrf52
board = nrf52_dk
framework = arduino

# 以下追記
upload_protocol = stlink

この状態でプログラムを書いて書き込むと、書き込み自体は成功して一見問題ない様に見えますが実際にプログラムは動きません。 原因は、定義されているボード情報の中のvariantnRF52DKとなっているためです。 これをGenericにするためにplatformio.iniに追記していきます。 ついでにその他のオプションも追記していきます。

[env:nrf52_dk]
platform = nordicnrf52
board = nrf52_dk
framework = arduino
upload_protocol = stlink

# 以下追記

# チップを定義
board_build.mcu = nrf52832 

# 動作周波数を定義
board_build.f_cpu = 64000000L

# BLEライブラリを使うために記述
build_flags = -DNRF52_S132 

# variantをGenericに変更
board_build.variant = Generic

platformio.iniをこの状態にすることで書き込み成功とプログラムが動きます。 ちなみに『nordicnrf52』プラットフォームに定義されているボードには『adafruit_feather_nrf52832』もありますが、これは『ST-LINK』の書き込みに現在は対応していません。 『ST-LINK』の書き込みに対応した全ボードは以下のリンクから確認できます。

docs.platformio.org

おまけ

今回使用した『ST-LINK v2』はAmazonから購入したものでしたが、私が個人で購入したものはAliexpressから購入したものでした。 上で紹介した手順で個人の『ST-LINK v2』で書き込みを行ったところなぜかデバイス(nRF52832)が見当たらないとエラーが出てしまいおかしいなと調査したところ、なぜか片側の3.3Vからの電圧が0Vでおかしいなと思いので中を開いてみると、なんとピンが片側だけ半田付けされていませんでした。 さらに、USB端子がなぜかぐらついていましたがこれはUSB端子の爪が半田付けされてないのが原因でした。

f:id:takumishinoda:20190324132754j:plain
半田付けがされてなかった。。

写真は半田付けした後のものですが、これで書き込みもできUSBの耐久度も増しました。 同じ現象がある方は参考にしていただければと思います。

まとめ

  • board_build.variantGenericにすることで書き込める。
  • 『PlatformIO』で『ST-LINK』を使って開発できるボードとできないボードがある。
  • 『ST-LINK v2』の互換機にはたまに半田不良がある。