📌

STM32 Nucleo-32をST-LINK化する

2022/02/20に公開

STMicroelectronicsのワンチップマイコンSTM32シリーズには、STM32 Nucleoという評価ボードがあります。ターゲットマイコンと、それにプログラムを書き込むST-LINK相当のマイコンが搭載されています。
Nucleo-32のターゲットマイコンを取り外し、ST-LINK相当の部分を使って、外部のSTM32 マイコンに書き込みができるようにします。
Nucleo-32にはピンヘッダが付いており、そのままブレッドボードに挿してターゲットMCUの書き込み、デバッグに使えるのでとても便利です。

動機

ちょっとしたロガー用に少ピンMCUを探していたところ、秋月電子でSOT8ピンのSTM32G031を見つけました。
専用書き込みツールとしてST-LINKがありますが、STM32シリーズの評価ボードであるNucleoでも単独で書き込みできるようです。
多ピンSTM32マイコンの搭載されたNucleo-64シリーズを汎用のST-LINK化する 記事は各所で見つかりますが、少ピンSTM32マイコンの搭載されたNucleo-32シリーズをST-LINK化するものは見つかりませんでした。
だったらヤッテヤンヨ。

改造

Nucleo-32に搭載されているターゲットマイコン(U2)を取り外し、そこにつながっていたSWD信号を引き出します。
U2を取り外すことでCN3とCN4の大半のピンが空きピンとなるので、そこに信号を引き出してやります。
また、Nucleo-32のST-LINK部分にはUSB経由でつながる仮想comポートがある(純正ST-LINKにはない)ので、これもついでに引き出します。

私の場合はSTM32 Nucleo Board STM32F303K8を使いましたが、他のシリーズでもいけるはずです。
Nucleo-32の回路図はココです。

ターゲットMCUの取り外し

もともと付いているMCUはQFPパッケージなので取り外しにはコツがいります。
私の場合は以下のようなジグを取り付けたハンダゴテを2本使いました。

QFP取り外しジグ

作業中の写真を撮り忘れたので文字で解説です。

まず、QFPの四方のピンにハンダを盛って完全にブリッジ状態にします。
そこに上記ジグ付きハンダゴテ2本を同時に当て、四方のハンダブリッジを溶かします。
軽くひねってみてチップが動くようになったら、2つのジグでチップを挟むようにして引き上げて取り外します。
熱を加えすぎるとパターンが剥がれてしまいますので慎重に。
あとはパターン部分に残っているハンダをハンダ吸い取り線などで取り除きます。
パターンがブリッジしていないことをよく確認してください。

配線の追加

U2を取り外すことでCN3、CN4の大半がN.C.になるので、ここに必要な信号線を引き出します。
私の場合は以下のようにしました。

信号名 U2
(もともと付いていたターゲットMCU)
CN4
(ピンヘッダ)
備考
SWDIO pin 23 pin 12 SWDデータ信号
SWCLK pin 24 pin 11 SWDクロック信号
VCP_RX pin 25 pin 6 シリアル受信信号
(シリアル送信信号はもともと
pin 5に出ている)

配線後のNucleo-32を以下に示します。

配線後のNucleo-32

結果

最終的なピンヘッダの信号は以下のようになります。

CN3 ピンNo. 信号名 備考
1 N.C.
2 N.C.
3 B1 / NRST ターゲットMCUに接続してSWとして使用可能
SW ONでLレベル、内部プルアップ設定が必要
4 GND ターゲットMCUのGNDとして使用可能
5 N.C.
6 N.C.
7 N.C.
8 N.C.
9 N.C.
10 N.C.
11 N.C.
12 N.C.
13 N.C.
14 N.C.
15 N.C.
CN4 ピンNo. 信号名 備考
1 VIN USB給電を使用しない場合の電源 (15V〜6V)
2 GND ターゲットMCUのGNDとして使用可能
3 B1 / NRST ターゲットMCUに接続してSWとして使用可能
4 +5V レギュレーション済みの5V電源
5 VCP_TX シリアル送信信号
書き込み用PCからアクセス可能
6 VCP_RX シリアル受信信号
書き込み用PCからアクセス可能
7 N.C.
8 N.C.
9 N.C.
10 N.C.
11 SWDIO SWDデータ信号
12 SWDCLK SWDクロック信号
13 AVDD +3V3をコイルでデカップリングしたアナログ用電源
14 +3V3 レギュレーション済みの3.3V電源
ターゲットMCUの電源として使用可能
15 LD3 ターゲットMCUに接続してLEDとして使用可能
Lレベルで点灯

VCP_TX/RXのシリアルポートはNucleo-32をUSBケーブルでPCに接続すると自動的に認識されます
WindowsならデバイスマネージャでCOMポート番号が分かります。
Linuxであれば、以下のコマンドを実行するとCOMポートがどのデバイスファイルに割り当てられたかが分かります。私のPCの場合は/dev/ttyACM0に割り当てられていました。

ls -l/dev/serial/by-id/

なお、Linuxで手軽にシリアル通信を試すならcuがおすすめです。
私のお気に入りのDebian系なら、以下でインストールできます。

apt install cu

ループバックによる通信確認は、CN4のピン5とピン6をジャンプワイヤなどで接続して以下のコマンドを実行し、入力した文字が画面上に表示されればOKです。
ジャンプワイヤを外して文字を入力すると画面上には何も表示されません。

cu -s 9600 -l /dev/ttyACM0

まとめ

本記事の改造によりブレッドボード上にコンパクトなSTM32のでデバッグ環境が構築できます。
USB接続一本でMCUへの書き込みに加え、書き込み用PCからのシリアル通信もできるのでデバッグがはかどります。
さらにNucleo-32上のLEDやスイッチが使えるので、ターゲットMCUの入出力を確認する場合などに使えます。

ひとまず、これを使ってSTM32G031のLチカまではできました。次はシリアル送受信あたりをやってみたいです。

Discussion