みなさんはPlatformIO使ってますか?僕は大好きです。
さて、PlatformIOではたくさんのSTMマイコンを使うことができますが、STMマイコンはそれ以上に数があり、自分の使いたいマイコンがない!ということもあるかもしれません。
というわけで、その解決方法を紹介します。
前提
今回の記事で解決できるのは、「そのマイコンのNucleoボードはあるが生(Generic)STMがない」またはその逆のときのみです。
両方ない場合はこの記事を読んでも解決できないのでご了承ください。
両方ない場合は、自分でピン情報などを定義する必要があり、一気にハードルが上がります。
説明
まず、PlatformIOのディレクトリをのぞいてみましょう。
platforms
フォルダの中にststm32
というフォルダがあります。
この中のboards
とmisc\svd
が大事になります。
中を見ればわかりますが、boards
には各ボードの情報が50行程度のjson形式で保存されています。つまり、ここにjsonを追加すれば、PlatformIOで使うことができるのです。
そして、misc\svd
には何万行もにわたってマイコンのピン情報などが保存されています。これがあるおかげで快適なコーディングができるわけです。
さて、すでにお気づきの方もいらっしゃるかもしれませんが、boards
ではNucleoボードと生STMは分けてある一方で、svd
はどちらも共通なのです!(そりゃマイコンは同じだもん)
なので、どっちかさえもともと存在していれば、長ったらしいファイルを作る必要はなく、jsonだけパパっと書くだけでばいいのです!
やろう
今回は例として、Nucleo H723ZGからSTM32H723ZG (Generic)を作ってみます。
上で説明したように、jsonだけ作ればよいです。
boards
フォルダに新しくjsonファイルを作ってください。
ファイル名はほかに合わせてgenericSTM32H723ZG.json
とかにでもしておきましょう。
できたら何らかのエディタで開いて編集できるようにし、まずNucleoのjson(今回ならnucleo_h723zg.json
)から全てコピペしてください。
そしていくつか変更します。
先に完成状態を見せてしまいます。
{
"build": {
"core": "stm32",
"cpu": "cortex-m7",
"extra_flags": "-DSTM32H7xx -DSTM32H723xx",
"f_cpu": "550000000L",
"mcu": "stm32h723zgt6",
"product_line": "STM32H723xx",
"variant": "STM32H7xx/H723Z(E-G)T_H730ZBT_H733ZGT"
},
"connectivity": [
"can",
"ethernet"
],
"debug": {
"jlink_device": "STM32H723ZG",
"openocd_target": "stm32h7x",
"svd_path": "STM32H723.svd"
},
"frameworks": [
"arduino",
"cmsis",
"stm32cube",
"libopencm3"
],
"name": "STM32H723ZG (564k RAM. 1024k Flash)",
"upload": {
"maximum_ram_size": 327680,
"maximum_size": 1048576,
"protocol": "serial",
"protocols": [
"blackmagic",
"dfu",
"jlink",
"serial",
"stlink"
]
},
"url": "https://www.st.com/en/microcontrollers-microprocessors/stm32h723zg.html",
"vendor": "Generic"
}
変更するところは5か所ほどです
debug
NucleoにはST-LINKがついていますが生STMにはついていませんので該当箇所を消します。
frameworks
若干Nucleoのものとは違います。これは他のgenericSTMのjsonからコピペで大丈夫です(たぶんgenericSTMは一緒で大丈夫なはず)。
name
名前は変えましょう。他のものに合わせるとよいです。
uploadのprotocols
frameworksと同じように他のjsonからコピペしてください
url・vendor
urlは別に自分用ならなくてもいい気がしますが一応、製品ページを書いておきましょう。
vendorはGenericに。
これで保存すればPlatformIOで新しく作ったボードが選択できるようになると思います。
最後に
筆者もまだまだマイコン初心者なので何か間違い・ご意見ありましたら是非コメントお願いします。