STM32マイコンを用いて自作基板をつくろう

はじめに

 nucleoボードは, そこそこ高性能でかつ簡単に扱うことができ便利です. しかし, 小型化したい場合は, STM32マイコン単体を使う基板を自分で設計することになるでしょう. 本記事では, その場合に必要な周辺部品や, プログラムの書き込み方法について記します. 

 本記事では, 開発環境はCubeIDE, マイコンはSTM32F446REを用います. また, 基板設計ソフトはEagleを用います. なお, CubeIDEを用いてプログラムを書き, nucleoボードに書き込む方法は把握していることを前提とします. 

 なお, とりあえず動いてるからヨシ👉が含まれているのでご注意ください. 本記事の内容により不利益が生じても一切責任は負いません. 

 

①nucleoボードを使って試験する

nucleoボードに使いたいセンサなどをつなぎ, 試験しておきましょう. このときCubeIDE上で作成したiocファイル(設定ファイル)が自作基板の配線を決めるときの参考になります.

②基板を設計する

a. 電源関係の部品を配置する

 F446REの電源電圧は1.7~3.6Vです. ここでは3.3Vを用いることにします. レギュレータは, 例えばNJM2391DL1-33を使えばいいでしょう(秋月電子でも購入できます). データシートを見ながら, 適当にコンデンサダイオードを配置します. 下図のコンデンサの容量はテキトーです. 出力側にのみ電解コンデンサも配置しているのはなんとなくです.

f:id:tgkhtknk:20210725161758p:plain

 F446REの1番(VBAT), 19番(VDD), 32番(VDD), 48番(VDD), 64番(VDD)ピンを3.3Vに接続します. また, 18番(VSS), 31番(VSS), 47番(VSS), 63番(VSS)をGNDに接続します. また, 今回はAD変換などの機能は使わないとし, 12番(VSSA)はGNDに, 13番(VDDA)は3.3Vに接続します. 

 F446REのこれら3.3Vに接続したピンのそばに, バイパスコンデンサとしてセラミックコンデンサを配置します. 0.1μFを4つくらい(1番と64番, 13番と19番は近いので2つに1つ配置)配置しておけばたぶん大丈夫です. 

 

b. プログラム書き込み用の配線を行う

 プログラム書き込み用に, 次の6つをピンソケットに接続します. 

・3.3V 書き込み時にnucleoボードから電源供給できるようにするため

・GND nucleoボードとGNDを共通化し, きちんと書き込めるようにするため

・7番(NRST)

・46番(TMS)

・49番(TCK

・55番(SWO)プログラム書き込みのみなら必要ないが, デバッグ時に必要

また, 7番(NRST)は, チャタリング防止のために0.1μFのセラミックコンデンサを挟んでGNDに接続します. 

c. 水晶発振子の配線を行う

 内部の発振子を使う場合は必要ありません. 水晶発振子を使う場合は, 5番(RCC_OSC_IN), 6番(RCC_OSC_OUT)ピンに接続します. また, 適当なセラミックコンデンサと抵抗を水晶発振子に接続します. 

d. 動作確認用LEDの配線を行う

 LチカができるようにLEDをつけておきます. GPIO_OUTPUTに設定できるピンならどこでもよいので, 電流制限用抵抗を忘れないよう気を付け配線しましょう.

e. その他の必ず必要な周辺部品の配線を行う

 30番ピン(VCAP_1)は4.7μFのセラミックコンデンサを挟んでGNDに接続します. 60番ピン(BOOT0)は10kΩの抵抗を挟んでGNDに接続します.

f. 自分が使いたいセンサなどの配線を行う

nucleoボードで試験した使いたいセンサの配線をしましょう.

 

 下図が回路図の全体です. バイパスコンデンサは実際に配置するピンの近くではなく, 下にまとめて書いています. 

f:id:tgkhtknk:20210725161849p:plain

 

また, こちらが配線図です. もともと色々なセンサの載せていたのを取っ払って最低限必要な部品のみにしたものなので, 部品が窮屈に固まっているのは気にしないでください.

f:id:tgkhtknk:20210725162050p:plain

③プログラムを書く

a. iocファイルを編集する

 だいたいは①で使ったiocファイルで問題ないですが, いくつか確認が必要です.

・水晶発振子用のピン
5番ピンがRCC_OSC_IN, 6番ピンがRCC_OSC_OUTになっていることを確認する. 

f:id:tgkhtknk:20210725143155p:plain

 

・プログラム書き込み用のピン
46番ピンがTMS, 49番ピンがTCK, 55番ピンがSWOになっていることを確認する.

f:id:tgkhtknk:20210725144131p:plain

 

・クロック設定
 外付けした水晶発振子を用いるなら, クロック設定を変更する必要があります.

 まず, 左の赤枠部分の"input frequency"を用いる水晶発振子に合わせて変更します. 次に, 左の赤丸部分"HSE"をクリックします. "E"はExternalのEです. これをクリックすることで外部の水晶発振子を使えることになります. 

 次に, 右の赤丸部分"PLLCLK"をクリックします. ここ"System Clock Mux"にも"HSE"がありますが, これをクリックすると, クロックを逓倍して高速動作させることができなくなります. 

 最後に, 右側の赤枠"HCLK"にお好みのシステムクロックを入力します. ここでは折角なので最大の180 MHzを入力しました. (速くすると消費電力が増えるのでその辺と相談して決めましょう)入力すると, 分周と逓倍の部分が勝手にいい感じに自動で決定されます. 当然ながらTimer clocksが変わるので, タイマー関係の機能を使っている場合は気を付けます.
f:id:tgkhtknk:20210725111531p:plain

b. プログラムを書く

iocファイルからプログラムを自動生成してもらったら, 残りを自分で書きます.

④nucleoボードと自作基板をつなぐ

緑色で囲んだ部分のジャンパーピンを外す

 nucleoボードをST-LINKとして使用できるようにするため, 2つのジャンパーピンを外します. nucleoボードとして使うときにまた刺す必要があるので, なくさないように気を付けます.

配線をつなぐ

 ②bで作成した自作基板のピンソケットにつなぎます. オス-メスのジャンパワイヤが必要です. 黄色で囲んだ部分は6つありますが, 画像1番上の1つを除いた5つをつなぎます. 

・上から2番目:TCK

・上から3番目:GND

・上から4番目:TMS

・上から5番目:NRST

・上から6番目:SWO

デバッグを行わずプログラムを書き込むだけなら, SWOはつながなくていいです. 

 また, 画像の赤色で囲んだ部分は3.3Vの出力です. 自作基板に電池などをつないでいない場合は, ここを自作基板のピンソケットの3.3Vにつないで電源供給します. 

f:id:tgkhtknk:20210725003654p:plain

⑤nucleoボードとPCをつなぐ

USBケーブルでnucleoボードとPCをつなぎます. ④をする前につなぐとプログラムを書き込めなくなるので, 気を付けます.

⑥プログラムを書き込む

nucleoボードの場合と同様の手順で書き込めます. 

⑦補足

 STM32マイコンをはんだづけするときは, 温度調節機能付きのはんだごてを用いた方がよいでしょう. 例えばこういうの. ステーション型の方が使いやすいですが, あちらは高いので...

 自作基板を設計する前に, ブレッドボードで試験したいかもしれません. その場合, マイコンDIP化する必要があります. 32ピンのSTM32マイコン, 例えばF303K8の場合は, 秋月電子通商で変換基板が売られています. 通常の太さではなく細ピンヘッダを使う必要があるので気を付けてください. 

akizukidenshi.com

一方, 64ピンのSTM32マイコン, 例えばF446REの場合は厄介です. 秋月電子通商にもDIP化基板は売られていますが, 正方形にピンヘッダを刺す部分が並んでいて, ブレッドボードに刺せません. 代わりにDigikeyで見つけたこれを使っていますが, 1864円もします...

www.digikey.jp