> For the complete documentation index, see [llms.txt](https://think-embedded.gitbook.io/micropython/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://think-embedded.gitbook.io/micropython/micropython-for-stm32.md).

# MicroPython for STM32

## บอร์ดไมโครคอนโทรลเลอร์ STM32&#x20;

ไมโครไพธอนได้ถูกพัฒนาขึ้นเพื่อนำมาใช้งานกับไมโครคอนโทรลเลอร์ (**MCU**) 32 บิต บอร์ดแรกเริ่มคือ [**PyBoard v1.1**](https://store.micropython.org/product/PYBv1.1) (หรือ [**PyBv1.1**](https://store.micropython.org/product/PYBv1.1)) และทางผู้พัฒนาได้เลือกใช้ไมโครคอนโทรลเลอร์ **STM32F405RGT6** (**ARM Cortex-M4F, 168MHz, 1024KB Flash, 192KB SRAM**) หลังจากนั้นก็มีบอร์ดอีกหลายเวอร์ชันออกมา เช่น [**PyBoard D-Series**](https://store.micropython.org/category/pyboard%20D-series) ที่ใช้ชิป **STM32F722** หรือ **STM32F767** (ARM Cortex-M7) เป็นต้น

![รูปภาพ: PyBv1.1(Source: https://store.micropython.org/product/PYBv1.1)](/files/-MIhKCLz3DSPOzj1jLWr)

นอกจากตัวเลือกที่เป็น **Official MicroPython Boards** โดยบริษัท **George Robotics Limited** ก็ยังมีบอร์ดของบริษัท **STMicroelectronics** ที่นำมาใช้กับไมโครไพธอนได้ เช่น บอร์ดในกลุ่มที่เรียกว่า [**STM32 Nucleo Boards**](https://www.st.com/en/evaluation-tools/stm32-nucleo-boards.html) ซึ่งเป็นบอร์ดที่มีราคาไม่แพง และมีมากกว่า 50 แบบให้เลือกใช้ แบ่งได้เป็น 3 กลุ่มย่อยตามจำนวนของขา **I/O** ของชิป **MCU** ได้แก่ **Nucleo-32**, **Nucleo-64** และ **Nucleo-144** และยังมีบอร์ดในกลุ่มที่เรียกว่า [**STM32 Discovery Kits**](https://www.st.com/en/evaluation-tools/stm32-discovery-kits.html) ซึ่งจะมีราคาสูงกว่าบอร์ด **Nucleo**

![รูปภาพ: ตัวอย่างบอร์ด STM32 Nucleo](/files/-MIhM22fsuFkrWD8Nptq)

**ข้อสังเกต**: บอร์ด **STM32 Nucleo** หรือ **Discovery Kits** ได้รวมวงจร **ST-Link V2 Programmer / Debugger** เอาไว้บนบอร์ดแล้ว ทำให้สะดวกต่อการอัปโหลดเฟิร์มแวร์ (ไฟล์ประเภท **.hex** หรือ **.bin**) ไปยังชิปไมโครคอนโทรลเลอร์ที่อยู่บนบอร์ดดังกล่าว

บอร์ดไมโครคอนโทรลเลอร์ตระกูล **STM32** รองรับการเขียนโปรแกรมได้หลายรูปแบบ เช่น&#x20;

* **C/C++** โดยใช้ซอฟต์แวร์ [**STM32CubeIDE**](https://www.st.com/en/development-tools/stm32cubeide.html)
* **C/C++** (**Arduino Sketch**) โดยใช้&#x20;
  * [**Arduino IDE**](https://www.arduino.cc/en/main/software) ร่วมกับ [**Arduino core for STM32**](https://github.com/stm32duino) หรือ
  * [**VSCode + PlatformIO IDE Extension**](https://platformio.org/install/ide?install=vscode)
* **C/C++ โดยใช้** [**ARM mbed OS**](https://os.mbed.com/) ร่วมกับ [**STM32 Boards**](https://os.mbed.com/platforms/?q=\&Target+vendor=STMicroelectronics)
* [**MicroPython for STM32**](http://micropython.org/stm32/)&#x20;
* [**CircuitPython**](https://circuitpython.org/) **(Adafruit)**
* [**Espruino (JavaScript) for STM32**](https://www.espruino.com/STM32)
* **...**

## แนวทางการเลือกใช้บอร์ด STM32 สำหรับไมโครไพธอน

ถ้าจะเลือกใช้บอร์ด **STM32** สำหรับผู้เริ่มต้น ก็แนะนำให้ใช้บอร์ดที่หาซื้อได้ไม่ยาก ราคาไม่แพง (อาจจะมีราคาต่ำกว่าหรือสูงกว่าหนึ่งพันบาท) แต่ที่สำคัญคือ บอร์ดที่จะเลือกใช้นั้น ต้องใช้ได้กับเฟิร์มแวร์ของไมโครไพธอน ดังนั้นให้ลองตรวจสอบดูว่า มีบอร์ดใดบ้างที่นำมาใช้ได้ เช่น ดูได้จากรายการในไดเรกทอรี `ports/stm32/boards` ของ [**MicroPython Source Code Repository**](https://github.com/micropython/micropython/)

{% embed url="<https://github.com/micropython/micropython/>" %}

![รูปภาพ: ตัวอย่างรายชื่อบอร์ด STM32 Nucleo ที่ใช้ได้กับไมโครไพธอน](/files/-MId4oVnCO8Eb4DUpDD0)

โดยความคิดเห็นส่วนตัวของผู้เขียน บอร์ด **STM32 Nucleo** ก็เป็นตัวเลือกที่น่าสนใจ เช่น **Nucleo F401RE / L476RG / F446RE / F767Z** แต่ก็มีข้อจำกัด ยกตัวอย่างเช่น บอร์ด **Nucleo-64** หรือ **Nucleo-144** มีรูปทรงหรือขนาดของบอร์ดไม่เหมาะสำหรับการนำไปต่องวงจรใช้งานบนเบรดบอร์ด (**Breadboard**)

แต่ถ้าต้องการเลือกใช้บอร์ด **STM32** ที่มีราคาถูกและสามารถนำไปเสียบขาลงบนเบรดบอร์ดได้ ก็แนะนำให้ใช้บอร์ด [**STM32F411CEU6 Mini-F4**](https://github.com/WeActTC/MiniF4-STM32F4x1) ([**Black Pill V2.0**](https://stm32-base.org/boards/STM32F411CEU6-WeAct-Black-Pill-V2.0.html)) ของ [**WeACT Studio**](https://github.com/WeActTC) (จากประเทศจีน)&#x20;

* ไฟล์ [**Schematic (.pdf)**](https://github.com/WeActTC/MiniF4-STM32F4x1/tree/master/HDK)
* ไฟล์ [**Pinout Diagram (.png)**](https://github.com/WeActTC/MiniF4-STM32F4x1/raw/master/images/STM32F4x1_PinoutDiagram_RichardBalint.png)&#x20;

**ข้อสังเกต**: บอร์ด **STM32F4x1 Mini-F4** นั้นมี 2 เวอร์ชันให้เลือกใช้ และแตกต่างกันที่ชิปไมโครคอนโทรลเลอร์ดังนี้&#x20;

* **STM32F401CEU6** (84MHz, 256KB Flash, 64KB SRAM)
* [**STM32F411CEU6**](https://www.st.com/resource/en/datasheet/stm32f411ce.pdf) (100MHz, 512KB Flash, 128KB SRAM)

![รูปภาพ: STM32F411CEU6 Mini-F4 Pinout (Source: WeAct Studio)](/files/-MId8Ke6n7jNFA7qVSd6)

![รูปภาพ: มุมมองด้านบนและด้านล่างของบอร์ด STM32F411CEU6 BlackPill](/files/-MIdHnXjcGbxcnJIeSNj)

**ข้อสังเกต**: ด้านล่างของบอร์ด มี **Solder Pads** (U3) สำหรับมีไว้สำหรับให้บัดกรีขาของไอซี **SPI Flash** (external) ที่ใช้ตัวถังแบบ **SOIC-8 Package** เพื่อช่วยเพิ่มความจุของ **Flash Storage** เมื่อใช้งานกับไมโครไพธอน หรือจะเลือกใช้จาก **Internal Flash** ของไมโครคอนโทรลเลอร์ **STM32** เท่านั้นก็ได้

บอร์ดนี้มีขนาดเล็ก (2.1" x 0.8") สามารถเสียบขาลงบนเบรดบอร์ดได้ จึงเหมาะสำหรับนำมาใช้ในการเรียนรู้หรือทำอุปกรณ์ต้นแบบ (**Prototyping**) มีคอนเนกเตอร์ **USB Type-C** สำหรับป้อนแรงดันไฟเลี้ยงจาก **USB (5V)** และเชื่อมต่อกับคอมพิวเตอร์ได้&#x20;

ไมโครคอนโทรลเลอร์ **STM32F411CEU6** รองรับการใช้งาน **USB OTG** และสามารถทำงานในโหมด **USB-CDC (Virtual Com Port)**, **USB Mass Storage** และ **USB HID (Keyboard or Mouse)**

การติดตั้งเฟิร์มแวร์ (**.hex** หรือ **.bin**) ลงในหน่วยความจำ **Flash** ภายในของชิปไมโครคอนโทรลเลอร์ สามารถทำได้โดยใช้ขา **I/O** ที่เรียกว่า [**SWD (Serial Wire Debug**) **Interface**](https://en.wikipedia.org/wiki/JTAG#Similar_interface_standards) แต่ต้องใช้ร่วมกับอุปกรณ์ภายนอก เช่น [**ST-Link/V2 USB Debugger and Programmer**](https://www.st.com/en/development-tools/st-link-v2.html) (หรืออุปกรณ์เวอร์ชัน [**V3**](https://www.st.com/en/development-tools/stlink-v3set.html) ที่ใหม่กว่&#xE32;**)** และใช้งานร่วมกับซอฟต์แวร์ [**STM32 ST-Link Utility**](https://www.st.com/en/development-tools/stsw-link004.html) หรือ [**STM32CubeProgrammer**](https://www.st.com/en/development-tools/stm32cubeprog.html)&#x20;

แต่ชิปตระกูล **STM32** เช่น **STM32F4xx** รองรับการทำงานในโหมด **DFU Bootloader** ช่วยให้โปรแกรมไฟล์ที่เป็นเฟิร์มแวร์ (ไฟล์ประเภท **.dfu**) ผ่านทาง **USB** ได้เช่นกัน โดยจะต้องใช้งานร่วมกับซอฟต์แวร์ เช่น [**DfuSe Utility**](https://www.st.com/en/development-tools/stsw-stm32080.html) หรือ [**STM32CubeProgrammer**](https://www.st.com/en/development-tools/stm32cubeprog.html)  หรือใช้โปรแกรมที่เป็น **Open Source** เช่น [**dfu-utils**](http://dfu-util.sourceforge.net/) ก็ได้

## กล่าวโดยสรุป

การเขียนข้อมูลจากไฟล์เฟิร์มแวร์สำหรับบอร์ดไมโครคอนโทรลเลอร์ **STM32** มีหลายวิธีและสามารถเลือกใช้ซอฟต์แวร์ของบริษัท **STMicroelectronics** หรือซอฟต์แวร์ประเภท **Open Source** ได้เช่นกัน

{% hint style="info" %}
**เผยแพร่ภายใต้ลิขสิทธิ์**\
**Attribution-ShareAlike 4.0 International (**[**CC BY-SA 4.0**](https://creativecommons.org/licenses/by-sa/4.0/)**)**
{% endhint %}
