> For the complete documentation index, see [llms.txt](https://taiphoon-com.gitbook.io/taiphoon.com-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://taiphoon-com.gitbook.io/taiphoon.com-docs/ja/support/knowledge-base/stm32cubeprogrammer.md).

# STM32CubeProgrammer による書き込み

USB DFU モードを介して、ファームウェアファイルをフライトコントローラーに書き込みます。この手順では、Morakot と ArduPilot の `arducopter_with_bl.hex` を例としています。

## ツールとファームウェアの準備

* [ST 公式ウェブサイト](https://www.st.com/en/development-tools/stm32cubeprog.html)から STM32CubeProgrammer をダウンロードしてインストールします。
* フライトコントローラーのモデルとハードウェアバージョンに対応する `.hex` や`.bin` などのファームウェアファイルを用意します。特定のバージョンが必要な場合は、<service@taiphoon.com.tw> までお問い合わせください。
* データ転送に対応した USB ケーブルでフライトコントローラーとパソコンを接続します。

{% hint style="warning" %}
まずプロペラを取り外してください。書き込み中は電源供給と USB 接続を維持し、プログラムが完了するまで待ってください。ファームウェアファイルや書き込みアドレスが誤っていると、フライトコントローラーが正常に起動しなくなるおそれがあります。
{% endhint %}

{% stepper %}
{% step %}

### DFU モードに入る

まず USB を抜き、フライトコントローラーの Boot ボタンを押したまま USB ケーブルを差し込んで、フライトコントローラーを DFU モードにします。Windows では、デバイスマネージャーで DFU デバイスが表示されているかを確認できます。名前は **STM32 BOOTLOADER** または **DFU in FS Mode** と表示される場合があります。

<figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2F8TKhXzCOQpmxXYaYLLJU%2Fimage.png?alt=media&#x26;token=6d8c9296-78dc-4344-b986-7cbac871060f" alt=""><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/Cz4IZEBqCk5SBHtJan7e/blobs/Sk5pDPIyWg0FPRVco29K/stm32-dfu-device-manager.png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### USB でフライトコントローラーに接続する

STM32CubeProgrammer を起動し、右側の接続インターフェースで **USB** を選択して、DFU デバイスが表示されていることを確認してから **Connect** を押します。

<figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2F3dP5X2OEpZdPVafizR8l%2Fimage.png?alt=media&#x26;token=08a189f6-f9f1-4683-a5c7-24124e0cf310" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### チップ全体の消去

接続後、左側の 2 番目のアイコンをクリックして **Erasing & Programming** ページに切り替え、**Erase flash memory** タブで **Full chip erase**（チップ全体の消去）を押します。確認ウィンドウ（Are you sure you want to erase full chip flash memory?）で **OK** を押し、`Mass erase command correctly executed.` が表示されるのを待ってから **OK** を押します。

<figure><img src="https://content.gitbook.com/content/Cz4IZEBqCk5SBHtJan7e/blobs/rdJknDDYTRrX1FYzlaLC/stm32-erasing-programming.png" alt=""><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/Cz4IZEBqCk5SBHtJan7e/blobs/rY484asHw15YsCNsV3rA/stm32-full-chip-erase-confirm.png" alt=""><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/Cz4IZEBqCk5SBHtJan7e/blobs/sXjFmkAsJeHRupXGd6Xh/stm32-full-chip-erase-complete.png" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
チップ全体の消去を行うと、bootloader とファームウェアを含め、フライトコントローラーのフラッシュメモリ内のすべての内容が消去されます。消去後は、bootloader を含むファームウェアファイル（例：`arducopter_with_bl.hex`）を書き込まないと、フライトコントローラーは正常に起動できません。
{% endhint %}
{% endstep %}

{% step %}

### ファームウェアファイルを開く

**Open file** を押し、対応する製品の `.hex` または`.bin` ファイルを選択して、**開く** を押します。下の図で選択しているファイルは `arducopter_with_bl.hex` です。

<figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2FJlLMAFP5BMppS1Q2VnVG%2Fimage.png?alt=media&#x26;token=19b7335f-80d0-413a-b8d0-687c5bd6a326" alt=""><figcaption></figcaption></figure>

<figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2FXie8M5goVet43t6vIkl2%2Fimage.png?alt=media&#x26;token=e9c9dd8b-41cf-4649-b68c-18fe8a5639bb" alt=""><figcaption></figcaption></figure>

`.hex` ファイルには書き込みアドレスが含まれています。`.bin` を使用する場合は、そのファームウェアの書き込み説明に従って書き込みアドレスを指定する必要があります。
{% endstep %}

{% step %}

### 書き込みを開始する

読み込んだファイル名と書き込みアドレスを確認し、**Download**（ダウンロード／書き込み）を押してファームウェアをフライトコントローラーに書き込みます。

<figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2FOjny4CjDVEFcYCLvtChp%2Fimage.png?alt=media&#x26;token=b1dddf30-a0f5-452e-874e-75ef2179e076" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### 書き込みの完了を待つ

進捗が完了するまで待ち、プログラムにダウンロード／書き込み成功と表示されることを確認します。エラーが表示された場合は、まずメッセージ全文を控え、接続とファームウェアファイルを確認してから対処してください。

<figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2FstENUXh69t1nO809TVlg%2Fimage.png?alt=media&#x26;token=d2b3110c-8047-435d-be1a-96e4dc40c1b9" alt=""><figcaption></figcaption></figure>

<figure><img src="https://160136817-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEhjsOwJXR5yBqExlT0G0%2Fuploads%2FLItbYpFEgzrbclvmexWa%2Fimage.png?alt=media&#x26;token=8d9794bb-ae66-4736-8c8b-0b37d247a0b2" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### 再起動してファームウェアを確認する

STM32CubeProgrammer の接続を終了して USB を抜き、フライトコントローラーを再起動します。ファームウェアバージョン、状態、パラメータを読み取れることを確認します。
{% endstep %}
{% endstepper %}

## 次の設定

書き込みが完了したら、[ファームウェアの書き込み](/taiphoon.com-docs/ja/firmware/ardupilot/flash-autopilot.md) に戻って設定を続けてください。
