แนะนำการใช้งาน STM32Cube for VS Code: Nucleo F446RE Board#

Keywords: VS Code IDE, STM32CubeMX, STM32F4, ST Nucleo Boards, Nucleo F446RE


STM32Cube for VS Code#

ในอดีต บริษัท STMicroelectronics (ST) ผู้ผลิตไมโครคอนโทรลเลอร์ตระกูล STM32 ได้มีซอฟต์แวร์ประเภท IDE (Integrated Development Environment) ให้เลือกใช้งานหลายตัว เช่น

รูป: ข้อมูลเกี่ยวกับซอฟต์แวร์ Atollic TrueSTUDIO และ SW4STM32 บนหน้าเว็บของบริษัท ST

ต่อมาทาง ST ได้รวมเครื่องมือเหล่านี้มาเป็น STM32CubeIDE ซึ่งมีพื้นฐานมาจาก Eclipse C/C++ Development Tools (CDT) Framework และได้รวมซอฟต์แวร์ STM32CubeMX เอาไว้ด้วย ใช้สำหรับการตั้งค่า MCU / MPU สร้างโค้ดเริ่มต้น (Initialization C Code Generator) ผ่านอินเทอร์เฟซแบบกราฟิก

ในเดือนมีนาคม ค.ศ. 2023 ทางบริษัท ST ได้เปิดตัว STM32Cube for VS Code: stmicroelectronics.stm32-vscode-extension (Version 1.0.0) เพื่อให้สามารถพัฒนา STM32 บน Visual Studio Code ได้

  • เป็นชุดเครื่องมือพัฒนาซอฟต์แวร์สำหรับไมโครคอนโทรลเลอร์ STM32 ที่ทำงานร่วมกับ Visual Studio Code (VS Code) พัฒนาและดูแลโดยบริษัท ST
  • ได้ออกแบบให้มีโครงสร้างเหมาะสำหรับทำงานแบบ CLI (Command Line) และแตกต่างจาก STM32CubeIDE ที่เป็น IDE ตัวหลักของ ST
  • STM32Cube for VS Code ได้ถูกพัฒนาให้เป็นแพลตฟอร์มแบบแยกส่วน (Modular Toolchain) ที่ได้รวมหลายเครื่องมือเข้าด้วยกันผ่าน VS Code

การใช้งานสำหรับเวอร์ชันแรก ๆ ผู้ใช้จำเป็นต้องติดตั้งโปรแกรมเสริมหลายตัวร่วมกัน เช่น

  • STM32CubeCLT
  • STM32CubeMX
  • STMCUFinder

เวอร์ชันล่าสุด ณ วันที่เขียนข้อความนี้ คือ Version 3.7.0 (15/12/2025) มีการปรับปรุงโครงสร้างซอฟต์แวร์ค่อนข้างมาก เช่น

  • เลิกใช้วิธีติดตั้งแบบ STM32CubeCLT
  • เปลี่ยนมาใช้เครื่องมือใหม่ชื่อ "STM32Cube Bundle Manager" สำหรับดาวน์โหลดและติดตั้งเครื่องมือย่อยต่าง ๆ ที่จำเป็นโดยอัตโนมัติ
  • อย่างไรก็ตาม ผู้ใช้ ยังคงต้องติดตั้ง STM32CubeMX แยกต่างหาก เพื่อใช้ในการสร้างโค้ดเริ่มต้นสำหรับโปรเจกต์

STM32Cube for VS Code แบ่งหน้าที่ของเครื่องมือออกเป็นส่วน ๆ ดังนี้

  1. ส่วนติดต่อผู้ใช้แบบ GUI

    • ทำงานภายใต้ VS Code เป็นสภาพแวดล้อมหลัก
    • รองรับการดีบักในฮาร์ดแวร์ โดยอาศัยส่วนขยาย Cortex-Debug (STM32 VS Code Debugger)
  2. การสร้างโค้ด (Code Generation)

    • ใช้ STM32CubeMX ของ STMicroelectronics (ต้องดาวน์โหลดและติดตั้งโปรแกรมนี้ด้วย) สำหรับเลือกบอร์ด หรือไมโครคอนโทรลเลอร์ ตั้งค่าการใช้งานวงจรภายใน และการสร้างโค้ดทำผ่าน CubeMX GUI หรือ CubeMX CLI
    • ได้โค้ดเริ่มต้นที่ใช้ STM32 HAL (Hardware Abstraction Layer) พร้อมไฟล์ตั้งค่า CMake / Ninja Build
    • รองรับการติดตั้งไฟล์สำหรับชิปรุ่นต่าง ๆ โดยใช้ CMSIS-PACK DFPs
  3. คอมไพเลอร์ (Compiler)

    • ใช้ ARM GNU Toolchain ( arm-none-eabi-gcc) สำหรับ ARM Cortex-M เพื่อคอมไพล์ซอร์สโค้ดภาษา C/C++ ให้เป็นไฟล์ .elf
    • ใช้ Clangd (แทนที่ IntelliSense แบบเดิม) ซึ่งเป็นเครื่องมือในตระกูล LLVM ที่ทำหน้าที่เป็น C/C++ Language Server เช่น ทำหน้าที่ Autocomplete และตรวจสอบไวยากรณ์โค้ด (Syntax Checking)
  4. ระบบ Build สำหรับโปรเจกต์

    • ใช้ CMake สำหรับการจัดการคอมไพล์โค้ดในโปรเจกต์ และ Ninja ซึ่งเป็น Backend สำหรับการทำขั้นตอน Build ที่รวดเร็ว
    • รองรับการ Build ที่เลือกได้ว่าจะเป็นแบบ Debug หรือ Release
  5. การโปรแกรมและดีบัก (Flash / Debug)

    • สามารถใช้ GDB (GNU Debugger) Debug Server ได้ เช่น ST-Link Server และ J-Link GDB Server ใช้งานร่วมกับอุปกรณ์ ST-Link และ J-Link Debug Probe ตามลำดับ
    • OpenOCD จะเปิดบริการ GDB Server ให้ GDB Client (เช่น arm-none-eabi-gdb) เชื่อมต่อเข้ามา
    • รองรับฟังก์ชันในการดีบัก เช่น Breakpoint, Step / Continue, Register / Memory view และ Peripheral View (โดยใช้ไฟล์ .SVD ของชิปไมโครคอนโทรลเลอร์)
    • ST-Link GDB Server รองรับการดีบัก Dual-Core / Multi-Core CPU

 


บอร์ดไมโครคอนโทรลเลอร์ STM32: ST NUCLEO#

STM32 Nucleo Boards เป็นบอร์ดพัฒนาไมโครคอนโทรลเลอร์ (Microcontroller Development Board) สำหรับชิปตระกูล STM32 ที่ผลิตและดูแลโดยบริษัท STMicroelectronics (ST) โดยตรง ออกแบบมา เพื่อใช้ในการเรียนรู้ การทดลอง และการพัฒนาระบบสมองกลฝังตัว

บอร์ดตระกูล Nucleo ได้รับความนิยมอย่างแพร่หลาย ทั้งในภาคการศึกษาและภาคอุตสาหกรรม ใช้งานร่วมกับเครื่องมือพัฒนาของ ST เช่น

  • STM32CubeMX / STM32CubeIDE / STM32Programmer
  • STM32Cube for VS Code

บอร์ด STM32 Nucleo มีข้อดีอีกประการหนึ่งคือ มี ST-Link Programmer/Debugger รวมอยู่บนบอร์ด ทำให้ไม่จำเป็นต้องใช้อุปกรณ์ภายนอกในการโปรแกรมหรือดีบัก

 


การแบ่งกลุ่มของบอร์ด Nucleo#

บอร์ด STM32 Nucleo สามารถแบ่งออกเป็น 3 กลุ่มหลัก ตามขนาดและความสามารถของไมโครคอนโทรลเลอร์ ได้แก่

  1. Nucleo-32

    • ขนาดเล็ก กะทัดรัด และ Breadboard-friendly
    • ใช้ไมโครคอนโทรลเลอร์ STM32 ระดับเริ่มต้น
    • เหมาะสำหรับการเรียนรู้พื้นฐานและโปรเจกต์ขนาดเล็ก
  2. Nucleo-64

    • ขนาดมาตรฐาน, Arduino Uno Shield compatible
    • มีขาเชื่อมต่อแบบ Arduin headers
    • รองรับไมโครคอนโทรลเลอร์ STM32 หลายตระกูล
  3. Nucleo-144

    • ขนาดใหญ่กว่าสองกลุ่มแรก และมีจำนวนขา I/O มาก
    • รองรับไมโครคอนโทรลเลอร์สมรรถนะสูง
    • เหมาะสำหรับงานที่ต้องการทรัพยากรและการเชื่อมต่อจำนวนมาก

รูป: บอร์ด ST Nucleo (Source: STMicroelectronics)

ไมโครคอนโทรลเลอร์ตระกูล STM32 ของบริษัท STMicroelectronics สามารถแบ่งออกเป็นหลายกลุ่มตามระดับสมรรถนะ การใช้พลังงาน และลักษณะการใช้งาน

  1. กลุ่ม Mainstream (ใช้งานทั่วไป)

    • STM32F0 (Arm Cortex-M0 / M0+) ใช้พลังงานต่ำ และราคาประหยัด
    • STM32F1 (Arm Cortex-M3)
    • STM32F3 (Arm Cortex-M4 + FPU) เหมาะสำหรับงานที่เน้น Analog I/O และ Motor Control
    • STM32F4 (Arm Cortex-M4 + FPU) สมรรถนะสูงกว่าตัวเลือกอื่นในกลุ่มนี้
  2. กลุ่ม Low-Power (ประหยัดพลังงาน)

    • STM32L0 (Arm Cortex-M0+) ใช้พลังงานต่ำมาก (Ultra-low power)
    • STM32L1 (Arm Cortex-M3)
    • STM32L3 (Arm Cortex-M4 + FPU)
    • STM32L4 / L4+ (Arm Cortex-M4 + FPU) สมรรถนะสูงกว่าตัวเลือกอื่นในกลุ่มนี้
  3. กลุ่ม High-Performance (สมรรถนะสูง)

    • STM32H7 (Arm Cortex-M7) เหมาะสำหรับงานที่ต้องการประมวลผลความเร็วสูง หรือระบบที่มีความซับซ้อน (บางรุ่นมีทั้ง Cortex-M7 + Cortex-M4 ในชิปเดียวกัน)
  4. กลุ่ม Ultra-Low-Power รุ่นใหม่

    • STM32U5 (Arm Cortex-M33) รองรับ TrustZone และความปลอดภัยขั้นสูง ใช้พลังงานต่ำมาก
  5. กลุ่มเฉพาะทาง (Specialized Families)

    • STM32G0 / G4 (Arm Cortex-M0+ / M4) เหมาะสำหรับงานอุตสาหกรรมและควบคุมกำลัง
    • STM32WB (Arm Cortex-M4 + M0+) มี Bluetooth Low Energy ในตัว
    • STM32WL (Arm Cortex-M4) รองรับ LoRa / Sub-GHz Wireless

ในบทความนี้ ได้เลือกใช้บอร์ด Nucleo F446RE (STM32F446RET6: Cortex-M4 CPU with FPU, 180 MHz max CPU frequency, 512 KB Flash, 128 KB SRAM) มาทดลองใช้กับ STM32Cube for VS Code:

 

รูป: บล็อกไดอะแกรมแสดงองค์ประกอบภายในของชิป STM32F446RET6 (Source: STMicroelectronics)

 


ขั้นตอนการใช้งาน STM32Cube for VS Code#

ถัดไปเป็นขั้นตอนการติดตั้งและใช้งาน STM32Cube for VS Code (ใช้งานสำหรับระบบปฏิบัติการ Windows 11)

ให้ติดตั้ง VS Code IDE ให้พร้อมใช้งานก่อน โดยดาวน์โหลดได้จาก:

และศึกษาการติดตั้งใช้งานได้จาก:

ขั้นตอนการดำเนินการ

  1. เปิดโปรแกรม Visual Studio Code (VS Code) จากนั้นไปที่เมนู Extensions และค้นหา STM32Cube for VS Code แล้วคลิกปุ่ม Install เพื่อติดตั้งส่วนขยาย
  2. หลังจากติดตั้งเสร็จ ให้คลิกเลือกไอคอน STM32Cube for VS Code ที่แถบด้านซ้ายของหน้าต่าง VS Code
  3. คลิกเลือกคำสั่ง Launch STM32CubeMX เพื่อสร้างโปรเจกต์ใหม่ โดยใช้โปรแกรม STM32CubeMX ในโหมด Graphical User Interface (GUI) การสร้างโค้ดจะทำผ่าน STM32CubeMX ก่อน จากนั้นจึงนำโฟลเดอร์โปรเจกต์มาเปิดใน VS Code
  4. ทำการตั้งค่าการใช้งานสำหรับบอร์ด Nucleo-F446RE (เลือกเป็นบอร์ดตัวอย่างในการใช้งาน) เช่น
    • การตั้งค่าใน Project Manager เช่น
      • ตั้งชื่อโปรเจกต์ (Project Name)
      • เลือกใช้ GCC สำหรับ Compiler/Linkler
      • เลือก CMake สำหรับ Toolchain/IDE
    • การกำหนดแหล่งกำเนิดสัญญาณนาฬิกา (Clock Source) ในส่วนที่เรียกว่า Cloock Configuration
      • การตั้งค่าความถี่การทำงานของ CPU
      • การเลือกใช้แหล่งที่มาของสัญญาณ Clock เช่น การเลือกใช้สัญญาณ Clock จากภายนอก
      • การตั้งค่าความถี่ของระบบบัสสำหรับอุปกรณ์รอบข้าง เช่น AHB และ APB1/APB2
    • เลือกเปิดใช้งาน Peripherals ตามตัวอย่างของ STM32CubeMX เช่น
      • SYS (System) เกี่ยวข้องกับการทำงานของชิปโดยร่วม เช่น การเลือกโหมดการดีบักแบบ SWD และการตั้งค่า System Tick Timer (SysTick)
      • RCC (Reset and Clock Control) ใช้สำหรับกำหนดแหล่งกำเนิดสัญญาณนาฬิกาและการกระจายสัญญาณนาฬิกาภายในระบบ เช่น การเลือกใช้งาน HSE (High-Speed Clock, Bypass Clock Source) ความถี่ 8MHz นำไปผ่านวงจร PLL เพื่อให้ได้ความถี่ที่สูงขึ้น
      • GPIO (สำหรับ Onboard LED / PA5 pin และ Push Button / PC13 pin) การเปิดใช้งานอินเทอร์รัพท์ สำหรับ External Interrupt (EXTI)
      • USART2 (สำหรับรับส่งข้อมูลบิตอนุกรมแบบ Asynchronous และใช้ขา PA2/PA3 สำหรับสัญญาณ TX / RX )
  5. บันทึกโปรเจกต์เป็นไฟล์ .ioc โดยกำหนดชื่อโปรเจกต์และเลือกไดเรกทอรีสำหรับจัดเก็บไฟล์
  6. กดปุ่ม Generate Code เพื่อให้ STM32CubeMX สร้างซอร์สโค้ดและไฟล์ตั้งค่าต่าง ๆ ของโปรเจกต์
  7. ปิดหรือสลับกลับจากหน้าต่าง STM32CubeMX มาที่ VS Code IDE จากนั้นเลือกเมนู File → Open Folder และเปิดโฟลเดอร์ของโปรเจกต์ที่ได้สร้างไว้
  8. ทำขั้นตอน Build โดยใช้ CMake หากคอมไพล์โค้ดได้สำเร็จ ถือว่า ได้สร้างโปรเจกต์ให้พร้อมใช้งานแล้ว
    • กดปุ่ม Ctrl+Shift+P แล้วค้นหาดูคำสั่งที่เริ่มต้นด้วย "CMake: Build"
  9. แก้ไขโค้ดในไฟล์ main.c และทำขั้นตอน Build อีกครั้ง
  10. อัปโหลดไฟล์ .elf ไปยังบอร์ด Nucleo และทำขั้นตอน On-Chip Debugging
    • กดปุ่ม Ctrl+Shift+P แล้วค้นหาดูคำสั่งที่เริ่มต้นด้วย > Run and Debug: Focus on STM32Cube Devices and Boards View (หรือกดปุ่ม Ctrl+Shift+D)

รูป: ค้นหาและติตตั้ง STM32Cube for VS Code

รูป: เปิดใช้งาน STM32CubeMX

รูป: หน้าต่างเริ่มต้นของ STM32CubeMX

รูป: เลือกสร้างโปรเจกต์ใหม่สำหรับบอร์ด Nucleo F446RE

รูป: ตัวอย่างการตั้งค่าใน Project Manager (ตั้งชื่อโปรเจกต์ และเลือกไดเรกทอรี เลือกใช้ GCC Compiler ร่วมกับ CMak)

รูป: ตัวอย่างการตั้งค่าในส่วนที่เรียกว่า Clock Configuration (เลือกสัญญาณอินพุต CLK 8MHz เข้าทาง HSE และไปผ่านวงจร PLL)

รูป: ตรวจสอบการตั้งค่าสำหรับ USART2

รูป: ตรวจสอบการตั้งค่าสำหรับ GPIO

รูป: ตรวจสอบการตั้งค่าสำหรับ RCC

รูป: เปิดโปรเจกต์ที่ได้จาก STM32CubeMX ใน VS Code

รูป: ทำขั้นตอน Build

รูป: ตั้งค่าการใช้งาน ST-Link Probe เมื่อมีการเชื่อมต่อบอร์ด Nucleo กับคอมพิวเตอร์ของผู้ใช้ และให้ตรวจสอบการตั้งค่าในไฟล์ .vscode/launch.json เพื่อตั้งค่าการใช้งานสำหรับ "STM32Cube: STM32 Launch ST-Link GDB Server"

รูป: ทำคำสั่ง > Run and Debug: Focus on STM32Cube Devices and Boards View (หรือกดปุ่ม Ctrl+Shift+D) แล้วจะมีรูป Icon สำหรับการรันและดีบัก อยู่ในแถบเครื่องมือทางซ้าย

รูป: เมื่อกดปุ่มลูกศรเพื่อทำขั้นตอน RUN AND DEBUG โดยเลือกใช้ "STM32Cube: STM32 Launch ST-Link GDB Server"

รูป: การทำงานในโหมด ST-Link GDB Server ซึ่งสามารถเชื่อมต่อกับบอร์ด Nucleo-F446RE ได้สำเร็จ

รูป: การหยุดชั่วคราวตามตำแหน่ง Breakpoint ในซอร์ดโค้ด main.c ตามที่ได้เลือกไว้

ตัวอย่างโค้ดบางส่วนในไฟล์ main.c เพื่อทำให้ LED กระพริบ และมีการส่งข้อความออกไปทาง USART2

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
   // Toggle the LED (PA5) pin.
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
    // Get the current logic value of the PC13 pin.
    uint8_t pinState = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5);
    char sbuf[32];
    // Write a string to the string buffer (sbuf),
    // showing the current LED state and the system tick count.
    sprintf(sbuf, "LED State: %s, Ticks: %lu\n",
            (pinState==GPIO_PIN_SET) ? "1":"0", (unsigned long) HAL_GetTick());
    // Send the string specified by the sbuf variable to USART2.
    HAL_UART_Transmit(&huart2, (uint8_t *)sbuf, 
                      strlen(sbuf), HAL_MAX_DELAY);
    // Delay for 500 msec.
    HAL_Delay(500);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

ตัวอย่างไฟล์ .vscode/launch.json

{
  "configurations": [
      {
         "type": "stlinkgdbtarget",
         "request": "launch",
         "name": "STM32Cube: STM32 Launch ST-Link GDB Server",
         "origin": "snippet",
         "cwd": "${workspaceFolder}",
         "preBuild": "${command:st-stm32-ide-debug-launch.build}",
         "runEntry": "main",
         "imagesAndSymbols": [
             {
               "imageFileName": 
               "${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}"
             }
          ]
      }
  ]
}

 


กล่าวสรุป#

บทความนี้ได้นำเสนอขั้นตอนการติดตั้งและใช้งาน STM32Cube for VS Code และทดลองสร้างโปรเจกต์ด้วย STM32CubeMX สำหรับบอร์ด Nucleo-F446RE และสาธิตการรันและดีบักโค้ด เมื่อทดสอบด้วยบอร์ดไมโครคอนโทรลเลอร์

 


This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Created: 2026-01-09 | Last Updated: 2026-01-09