2
0

使いたいSTMマイコンがPlatformIOにないときに。

Posted at

みなさんはPlatformIO使ってますか?僕は大好きです。
さて、PlatformIOではたくさんのSTMマイコンを使うことができますが、STMマイコンはそれ以上に数があり、自分の使いたいマイコンがない!ということもあるかもしれません。
というわけで、その解決方法を紹介します。

前提

今回の記事で解決できるのは、「そのマイコンのNucleoボードはあるが生(Generic)STMがない」またはその逆のときのみです。
両方ない場合はこの記事を読んでも解決できないのでご了承ください。

両方ない場合は、自分でピン情報などを定義する必要があり、一気にハードルが上がります。

説明

まず、PlatformIOのディレクトリをのぞいてみましょう。
platformsフォルダの中にststm32というフォルダがあります。
この中のboardsmisc\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)から全てコピペしてください。

そしていくつか変更します。

先に完成状態を見せてしまいます。

genericSTM32H723ZG.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で新しく作ったボードが選択できるようになると思います。

最後に

筆者もまだまだマイコン初心者なので何か間違い・ご意見ありましたら是非コメントお願いします。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0