ขั้นตอนการดำเนินการสำหรับบอร์ด STM32
ถ้าใช้บอร์ด WeAct STM32F411CEU6 (Black Pill) ให้ดาวน์โหลดและติดตั้งไฟล์ MicroPython Firmware (pre-built binary file) arrow-up-right จาก Github ซึ่งมีประเภทของไฟล์ให้เลือก เช่น .hex หรือ .dfu และยังจำแนกตามรูปแบบการใช้หน่วยความจำ Flash
กรณีที่ใช้เฉพาะ Internal Flash (ไม่มี External SPI Flash Chip )
กรณีที่ใช้ External SPI Flash 4MB
กรณีที่ใช้ External SPI Flash 8MB
Windows : ให้ดาวน์โหลดซอฟต์แวร์ของบริษัท STMicroelectronics แล้วติดตั้งในระบบให้พร้อมใช้งาน (มีขั้นตอนการรีจิสเตอร์ผู้ใช้ก่อน จึงจะสามารถดาวน์โหลดไฟล์จากเว็บไซต์ของทางบริษัทได้) มีอยู่ 3 ตัวเลือกดังนี้
Linux (Ubuntu, Raspbian OS) : ให้ติดตั้งโปรแกรม เช่น openocd, stlink-tools และ dfu-util เพื่อเอาไว้ใช้งาน
ข้อสังเกต: ถ้าใช้บอร์ด STM32 Nucleo หรือ Discovery การแฟลชเฟิร์มแวร์ (Firmware Flashing ) สามารถทำได้ง่าย เนื่องจากเมื่อเสียบสาย USB กับคอมพิวเตอร์ จะมองเห็น Virtual Drive (USB Mass Storage) ผู้ใช้สามารถลากไฟล์ .bin ไปวางใส่ได้เลย (Drag & Drop )
การโปรแกรมด้วยวิธี SWD สำหรับ Windows
ถ้ามีอุปกรณ์ ST-Link/V2 สำหรับการโปรแกรมด้วยวิธี SWD ก็สามารถใช้ไฟล์ .hex ได้เลย ในเครื่องคอมพิวเตอร์ (Windows ) จะต้องมีการติดตั้งโปรแกรม STM32 ST-Link Utility ไว้แล้ว
รูปภาพ: อุปกรณ์ ST-Link V2 USB Dongle (Low-Cost) รูปภาพ: การเชื่อมต่ออุปกรณ์ ST-Link/V2 กับบอร์ด STM32F411CEU ที่ขา SWD STM32 (SWD) | ST-Link/V2
GND <----------> GND
SCK <----------> SWCLK
DIO <----------> SWDIO
3V3 <----------> 3.3V
การเชื่อมต่อด้วยวิธี SWD จะใช้สายไฟเชื่อมต่อ 4 เส้น ระหว่างบอร์ด STM32 กับอุปกรณ์ ST-Link V2
เมื่อเชื่อมต่อกับบอร์ด STM32 ผ่านทาง ST-Link V2 USB กับคอมพิวเตอร์ได้แล้ว ให้เปิดโปรแกรม STM32 ST-Link Utility จากนั้นไปที่เมนู Target > Connect ถ้าสามารถเชื่อมต่อได้ จะปรากฏข้อความระบุ Device ที่ตรวจพบ
รูปภาพ: ST-Link Utility และเปิดไฟล์ .hex สำหรับ WeAct STM32F411CEU ถัดไปให้เปิดไฟล์ .hex โดยทำคำสั่งจากเมนู File > Open File แล้วเลือกไฟล์ .hex ที่ต้องการจะโปรแกรมไปยังบอร์ดไมโครคอนโทรลเลอร์ จากนั้นทำขั้นตอน Target > Program & Verify (หรืออาจทำขั้นตอน Erase Chip ก่อนก็ได้ เพื่อเคลียร์หน่วยความจำ Flash ทั้งหมด)
รูปภาพ: ข้อความแสดงสถานะการทำงานของ ST-Link Utility การโปรแกรมด้วยวิธี DFU สำหรับ Windows
เมื่อได้ติดตั้งโปรแกรมชื่อ DfuSe arrow-up-right ไว้สำหรับการอัปโหลดไฟล์เฟิร์มแวร์ด้วยวิธี DFU (USB device firmware upgrade ) ถัดไปให้เตรียมอุปกรณ์ฮาร์ดแวร์ดังนี้ (ในกรณีที่ใช้บอร์ด WeAct STM32F411CEU6 )
เชื่อมต่อขา A10 (PA0/USB_FS_ID ) ด้วยสาย Jumper Wire กับตัวต้านทาน 10k แบบ Pullup ไปยัง 3.3V
เสียบสาย USB-C เชื่อมต่อบอร์ดไมโครคอนโทรลเลอร์กับคอมพิวเตอร์
กดปุ่ม BOOT0 กดค้างไว้ กดปุ่ม RESET แล้วจึงปล่อยปุ่ม RESET และ BOOT0 ตามลำดับ
ถ้าต้องการจะแปลงไฟล์ .hex เป็น .dfu ก็ให้ใช้โปรแกรมชื่อ DFU File Manager ของ DfuSe โดยกดปุ่ม "S19 or Hex" แล้วเลือกไฟล์ .hex ตามด้วยการกดปุ่ม Generate
รูปภาพ: การแปลงไฟล์ .hex ให้เป็น .dfu
ถัดไปให้เปิดโปรแกรม DfuSe Demo ถ้าเชื่อมต่อบอร์ด STM32 แล้วอยู่ในโหมด DFU จะมองเห็น Vendor ID: 0483 , Product ID: DF11 และ Version: 2200
รูปภาพ: แสดงสถานะการมองเห็นอุปกรณ์ STM32 DFU Mode
กดปุ่ม Choose… ในส่วนของ Upgrade or Verify Action เลือกไฟล์ .dfu แล้วกดปุ่ม Upgrade เพื่อทำขั้นตอนสุดท้าย
รูปภาพ: แสดงสถานะการเปิดไฟล์ .dfu ได้สำเร็จ
รูปภาพ: ขั้นตอนการเขียนไฟล์ .dfu ไปยังบอร์ดไมโครคอนโทรลเลอร์ ตัวอย่างสำหรับบอร์ด STM32F405 (เข้าสู่ DFU USB Bootloader โดยต่อสายที่ขา BOOT0 กับ 3.3V แล้วกดปุ่มรีเซต) และเลือก MicroPython Firmware: "Firmware for hand-made PYBv3 board"arrow-up-right
รูปภาพ: บอร์ด STM32F405RGT6 Core Board
ปัญหาที่พบ
ถ้าได้ติดตั้งโปรแกรม DfuSe arrow-up-right และ STM32CubeProgrammerarrow-up-right ของบริษัท STMicroelectronics สำหรับ Windows 10 จะต้องเลือกใช้ USB Driver ให้ถูกต้อง
ลองใช้โปรแกรม USB Driver Tool arrow-up-right ตรวจสอบรายการ USB Drivers ในระบบ (หรือเปลี่ยนตัวเลือก)
รูปภาพ: STM32 Bootloader ใช้สำหรับ STM32CubeProgrammer รูปภาพ: STM32 Device in DFU Mode ใช้สำหรับ DfuSe Demo
การใช้งาน STM32CubeProgrammer สำหรับ Windows
เราสามารถใช้ซอฟต์แวร์ STM32CubeProgrammer ซึ่งรองรับการใช้งานได้ทั้ง SWD (ใช้ร่วมกับ ST-Link V2 ) และ DFU (USB) และเลือกใช้ไฟล์ .hex ได้เลย (ไม่ต้องแปลงเป็น .dfu )
การใช้งานโปรแกรมนี้ ก็ทำได้ง่าย เช่น เลือกใช้ ST-Link แล้วก็เชื่อมต่อกับบอร์ดไมโครคอนโทรลเลอร์ (Connect ) จากนั้นเลือกไฟล์ .hex (Open File ) แล้วก็กดปุ่ม Download เพื่อเขียนข้อมูลไปยังอุปกรณ์เป้าหมาย
รูปภาพ: การเลือกอุปกรณ์ ST-LINK รูปภาพ: การแฟลชไฟล์ .hex / .dfu ด้วยโปรแกรม STM32CubeProgrammer
เมื่อติดตั้งเฟิร์มแวร์สำหรับไมโครไพธอนได้สำเร็จแล้ว และนำบอร์ด STM32F411CEU6 ไปเชื่อมต่อเข้ากับพอร์ต USB ของคอมพิวเตอร์ (ใช้สาย USB Type-C ) จะมองเห็นไดร์ฟชื่อ STM32F411CE
รูปภาพ: รายการไฟล์ภายในไดร์ฟของบอร์ด STM32F411CE-MicroPython ตัวอย่างการทำคำสั่งต่อไปนี้ ได้ทดลองใช้กับ Raspbian OS สำหรับบอร์ด Raspberry Pi 4 แต่ก็นำไปใช้กับคอมพิวเตอร์ที่ทำงานด้วย Linux Ubuntu ได้เหมือนกัน
เริ่มต้นด้วยทำคำสั่งติดตั้งโปรแกรมนี้
$ sudo apt-get install stlink-tools
จากนั้นให้เชื่อมต่ออุปกรณ์ ST-Link V2 กับบอร์ด STM32F411CEU6 และพอร์ต USB ของคอมพิวเตอร์ แล้วทำคำสั่งต่อไปนี้ เพื่อลบข้อมูลทั้งหมดในหน่วยความจำ Flash (Full Chip Erase) และเขียนไฟล์ .hex ไปยังอุปกรณ์ ตามลำดับ
$ st-flash erase
$ st-flash --reset write firmware_internal_rom_stm32f411_v1.12-540.hex 0x8000000
รูปภาพ: ตัวอย่างการทำคำสั่ง st-flash erase รูปภาพ: ตัวอย่างการทำคำสั่ง st-flash write การใช้โปรแกรม dfu-util สำหรับ Linux
ตัวอย่างการทำคำสั่งต่อไปนี้ ได้ทดลองใช้กับ Raspbian OS สำหรับบอร์ด Raspberry Pi 4 แต่ก็สามารถนำไปใช้กับคอมพิวเตอร์ที่ทำงานด้วย Linux Ubuntu ได้เหมือนกัน
เริ่มต้นด้วยการทำให้บอร์ด STM32 เข้าโหมด DFU Bootloader Mode ก่อน จากนั้นจึงทำคำสั่งดังต่อไปนี้ เพื่อติดตั้งโปรแกรม แล้วจึงตรวจสอบดูว่า สามารถมองเห็นอุปกรณ์ในโหมด DFU หรือไม่
$ sudo apt-get install dfu-util
$ dfu-util -d 0483:df11 -l
จากนั้นให้ทำคำสั่งเพื่อเขียนไฟล์ .dfu ไปยังหน่วยความจำ Flash ภายในชิป STM32 (ในตัวอยางนี้ได้ดาวน์โหลดไฟล์ .dfu ที่เป็นเฟิร์มแวร์ของไมโครไพธอนเวอร์ชัน v1.12 สำหรับบอร์ด WeAct STM32F411CEU6 มายังคอมพิวเตอร์ของผู้ใช้แล้ว)
$ dfu-util -a 0 -D ./firmware_internal_rom_stm32f411_v1.12-540.dfu
รูปภาพ: ข้อความแสดงสถานะการเชื่อมต่อกับอุปกรณ์ในโหมด DFU
รูปภาพ: ข้อความที่แสดงสถานะการทำงานของ dfu-util
การใช้โปรแกรม OpenOCD สำหรับ Linux
โปรแกรม openocd รองรับการใช้งานอุปกรณ์ ST-LINK V2 เราจะมาลองใช้งานเป็นตัวอย่าง ตัวอย่างการทำคำสั่งต่อไปนี้ ได้ทดลองใช้กับ Raspbian OS สำหรับบอร์ด Raspberry Pi 4 แต่ก็สามารถนำไปใช้กับคอมพิวเตอร์ที่ทำงานด้วย Linux Ubuntu ได้เหมือนกัน
เริ่มต้นด้วยการติดตั้งใช้งานโปรแกรมนี้ก่อน
$ sudo apt-get install openocd libftdi-dev
ถัดไปให้สร้างไฟล์ ./target_stm32f4.cfg ซึ่งเป็นการตั้งค่าการใช้งาน (OpenOCD Configuration Settings ) ดังนี้
source [find interface/stlink.cfg]
transport select hla_swd
source [find target/stm32f4x.cfg]
telnet_port disabled
gdb_port disabled
reset_config none separate
adapter speed 980
เชื่อมต่ออุปกรณ์ให้พร้อม จากนั้นทำคำสั่งเพื่อลบข้อมูลในหน่วยความจำ Flash ของอุปกรณ์เป้าหมาย โดยทำคำสั่งดังนี้
$ openocd -f ./target_stm32f4.cfg \
-c "init" -c "reset init" \
-c "stm32f2x unlock 0; reset halt" \
-c "flash erase_sector 0 0 last" \
-c "reset" -c "shutdown"
คำสั่งถัดไปคือ การเขียนข้อมูลจากไฟล์เฟิร์มแวร์ไปยังอุปกรณ์เป้าหมาย
$ export FIRMWARE=./firmware_internal_rom_stm32f411_v1.12-540.hex
$ openocd -f ./target_stm32f4.cfg \
-c "init" -c "reset init" \
-c "program $FIRMWARE verify 0x8000000" \
-c "reset" -c "exit"
ีูรูปภาพ: แสดงข้อความเมื่อทำคำสั่ง openocd เพื่อเขียนไฟล์ .hex เราได้เห็นวิธีการและเครื่องมือประเภทซอฟต์แวร์ต่าง ๆ ที่เป็นตัวเลือกสำหรับการติดตั้งเฟิร์มแวร์ของไมโครไพธอน เพื่อให้ใช้ได้งานกับบอร์ดไมโครคอนโทรลเลอร์ STM32 เช่น STM32F411CEU6
เมื่อได้ติดตั้งเฟิร์มแวร์สำหรับไมโครไพธอนได้แล้ว ถัดไปก็สามารถลองใช้โปรแกรมอย่างเช่น Thonny IDE เชื่อมต่อไปยังบอร์ดไมโครคอนโทรลเลอร์ และทดลองเขียนโค้ดตามตัวอย่างในเนื้อหาถัดไป