STM32 Nucleo-32をST-LINK化する
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の四方のピンにハンダを盛って完全にブリッジ状態にします。
そこに上記ジグ付きハンダゴテ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を以下に示します。
結果
最終的なピンヘッダの信号は以下のようになります。
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