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にて購入できます。
nRF52832搭載BLEモジュール MDBT42Q--販売終了www.switch-science.com
しかし『MDBT42Q』を開発する際非常に高度で繊細な半田付け技術を要するので、今回の開発にはI/Oが使いやすい大きさになって同モジュールを搭載した『Adafruit Feather nRF52 Bluefruit LE』を使用していきます。
追記: 2020/02/23
注意: 本記事の方法でプログラムを書き込むとAdafruitのブートローダが削除されて『Adafruit Feather nRF52 Bluefruit LE』としてUSB(UART)からプログラムが書き込みできなくなるので注意してください。
Adafruit Feather nRF52 Bluefruit LEwww.switch-science.com
Adafruit Feather nRF52 Bluefruit LEの加工
『Adafruit Feather nRF52 Bluefruit LE』は付属のUSB端子から書き込みができる様になっていますが、『ST-LINK v2』を使う場合はボード中央部の半田付けされていない部分を使います。 この部分から必要なピンから線を出して『ST-LINK v2』に接続できる様にします。 今回使うピン配列は以下の様になります。

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

配線
必要な線が出せたので、実際に書き込むための配線をしていきます。
ST-LINK v2 | Adafruit Feather nRF52 Bluefruit LE |
---|---|
3.3V | 3.3V |
GND | GND |
SWDIO | SWDIO |
SWCLK | SWCLK |
これで配線は終了です.
PlatformIOでの準備
『PLatformIO』ではいつも通りpio init
でplatformio.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
この状態でプログラムを書いて書き込むと、書き込み自体は成功して一見問題ない様に見えますが実際にプログラムは動きません。 原因は、定義されているボード情報の中のvariant
がnRF52DK
となっているためです。 これを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』の書き込みに対応した全ボードは以下のリンクから確認できます。
おまけ
今回使用した『ST-LINK v2』はAmazonから購入したものでしたが、私が個人で購入したものはAliexpressから購入したものでした。 上で紹介した手順で個人の『ST-LINK v2』で書き込みを行ったところなぜかデバイス(nRF52832)が見当たらないとエラーが出てしまいおかしいなと調査したところ、なぜか片側の3.3Vからの電圧が0Vでおかしいなと思いので中を開いてみると、なんとピンが片側だけ半田付けされていませんでした。 さらに、USB端子がなぜかぐらついていましたがこれはUSB端子の爪が半田付けされてないのが原因でした。

写真は半田付けした後のものですが、これで書き込みもできUSBの耐久度も増しました。 同じ現象がある方は参考にしていただければと思います。
まとめ
board_build.variant
をGeneric
にすることで書き込める。- 『PlatformIO』で『ST-LINK』を使って開発できるボードとできないボードがある。
- 『ST-LINK v2』の互換機にはたまに半田不良がある。
コメント
コメントを投稿