> 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/th/support/knowledge-base/stm32cubeprogrammer.md).

# การแฟลชด้วย STM32CubeProgrammer

เขียนไฟล์เฟิร์มแวร์ลงในตัวควบคุมการบินผ่านโหมด USB DFU ขั้นตอนนี้ใช้ Morakot และไฟล์ `arducopter_with_bl.hex` ของ ArduPilot เป็นตัวอย่าง

## เตรียมเครื่องมือและเฟิร์มแวร์

* ดาวน์โหลดและติดตั้ง STM32CubeProgrammer จาก [เว็บไซต์ทางการของ ST](https://www.st.com/en/development-tools/stm32cubeprog.html)
* เตรียมไฟล์เฟิร์มแวร์ เช่น `.hex` หรือ `.bin` ที่ตรงกับรุ่นตัวควบคุมการบินและเวอร์ชันฮาร์ดแวร์ หากต้องการเวอร์ชันที่ระบุ โปรดติดต่อ <service@taiphoon.com.tw>
* ใช้สาย USB ที่รองรับการส่งข้อมูลเชื่อมต่อตัวควบคุมการบินกับคอมพิวเตอร์

{% hint style="warning" %}
ถอดใบพัดออกก่อน ระหว่างแฟลชให้คงการจ่ายไฟและการเชื่อมต่อ USB ไว้ และรอจนกว่าโปรแกรมจะทำงานเสร็จ หากไฟล์เฟิร์มแวร์หรือแอดเดรสที่เขียนไม่ถูกต้อง อาจทำให้ตัวควบคุมการบินไม่สามารถบูตได้ตามปกติ
{% endhint %}

{% stepper %}
{% step %}

### เข้าสู่โหมด DFU

ถอด USB ออกก่อน กดปุ่ม Boot บนตัวควบคุมการบินค้างไว้แล้วเสียบสาย USB เพื่อให้ตัวควบคุมการบินเข้าสู่โหมด DFU ใน Windows สามารถตรวจสอบใน Device Manager ว่ามีอุปกรณ์ 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/MaE0BhiwIATT2xWZzZn1/blobs/ETmoDoeLAZVE8CBIEH3L/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 %}

### ลบข้อมูลทั้งชิป

หลังเชื่อมต่อแล้ว ให้คลิกไอคอนที่สองทางด้านซ้ายเพื่อสลับไปยังหน้า **Erasing & Programming** แล้วกด **Full chip erase** (ลบข้อมูลทั้งชิป) ในแท็บ **Erase flash memory** ในหน้าต่างยืนยัน (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/MaE0BhiwIATT2xWZzZn1/blobs/xcFmqWwCkNZeyRGaAXhH/stm32-erasing-programming.png" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/G9pszR95yiPez9pNlAce/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` ของผลิตภัณฑ์ที่ตรงกัน แล้วกด **เปิด (Open)** ไฟล์ที่เลือกในภาพด้านล่างคือ `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/th/firmware/ardupilot/flash-autopilot.md) เพื่อตั้งค่าต่อ
