โปรแกรม STM32F103C8 ผ่าน USB ด้วย Arduino IDE
บทความสอนการลง Boot loader บอร์ด STM32F103C8 และการอัพโหลดโปรแกรมผ่านพอร์ต USB ด้วย Arduino IDE
3 November, 2019 by
โปรแกรม STM32F103C8 ผ่าน USB ด้วย Arduino IDE
Liew Wuttipat
| No comments yet

บอร์ดไมโครคอนโทรลเลอร์ STM32F103C8 กำลังได้รับความนิยมเป็นอย่างมาก ต้องขอบคุณสถาปัตยกรรม Arm Cortex M3 ซึ่งทำให้มีความเร็วที่สูง จำนวนขาพินให้ใช้งานที่มาก อีกทั้งบอร์ดนี้ยังสามารถเขียนโปรแกรมด้วย Arduino IDE ได้ จึงทำให้เป็นตัวเลือกที่เหมาะสำหรับเอามาทำของเล่น ทำโปรเจคต่างๆ หรือแม้กระทั่งวิศวกรหลายๆที่ก็นำมาทำ Quick prototyping

ในบทความนี้จะสอนวิธีการลง Boot loader ที่ทำให้โปรแกรมผ่านโปรแกรม Arduino IDE ได้ เนื่องจากบางครั้งเราซื้อบอร์ดมา ทางร้านขายก็อาจจะไม่ได้ลงไว้ให้เรา เราจึงต้องศึกษาวิธีการลงเองเอาไว้ ก่อนอื่นเลยเราก็ต้องเตรียมอุปกรณ์ที่ต้องใช้

อุปกรณ์ที่จำเป็น

* STM32 - (BluePill) STM32F103C8
* FTDI Programmer หรือ USB-to-Serial
* Jumper wire สายจั้มเปอร์
* Breadboard จะใช้หรือไม่ใช้ก็ได้

การที่เราโปรแกรมบอร์ดผ่านพอร์ต USB ได้ เราจะต้องแฟรช Maple boot loader เข้าไปที่ตัวบอร์ดก่อน เราจะทำได้โดยใช้ Serial FTDI หรือ USB-to-Serial โดยการต่อสายไฟระหว่างขา Rx Tx เข้ากับ STM32 ตามภาพ

ขา Vcc ของ FTDI ต่อเข้ากับขา 5V ของ STM32 เพื่อเอาไฟเลี้ยง, ขา Gnd ต่อเข้ากับขา Gnd, ขา Rx กับ Tx ของ FTDI ต่อเข้ากับขา A9 และ A10 ของ STM32 ตามลำดับ (ขา A9 เป็นขา Tx ของ STM32 ส่วนขา A10 ก็เป็น Rx)

ให้ดูว่าตัวจั้มเปอร์ boot 0 บนบอร์ด STM32 ต้องอยู่ที่ 1 (programming mode) ตอนที่เรากำลังอัพโหลด เมื่ออัพโหลดเสร็จแล้วจึงเปลี่ยนกลับมาเป็น 0 (operating mode)

หลัวจากที่ต่อ FTDI เข้ากับ STM32 เรียบร้อยแล้ว ก็ให้เสียบสาย USB ที่ตัว FTDI เข้ากับคอมพิวเตอร์ได้เลย ต่อไปก็มาถึงขั้นตอนการอัพโหลด Maple Boot loader ลงบอร์ด STM32 แล้ว ให้ทำตามขั้นตอนต่อไปนี้

  1. ดาวน์โหลดไฟล์ boot loader (bin) จากลิ้งค์นี้ generic_boot20_pc13.bin

  2. ดาวน์โหลด STM Flash loader สำหรับเอาไฟล์ bin ลงไปยัง STM32 โดยโหลดจากลิ้งค์นี้ FLASHER-STM32 (ถ้ายังไม่ได้สมัครสมาชิก ให้สมัครด้วย)

  3. เมื่อดาวน์โหลดมาแล้วก็ให้เปิดโปรแกรมขึ้นมา ตัวโปรแกรมจะหา COM port ให้เองโดยอัตโนมัติ แต่ถ้าไม่ขึ้นให้เปิดดูใน Device manager และก็เช็คว่าเราเลือกพอร์ตถูกต้อง ในที่นี้เป็น COM4 ส่วนตั้งค่าอื่นๆก็เอาให้เหมือนตามรูปนี้

  4. กดปุ่ม Next 2 รอบ ตัวโปรแกรมจะหาบอร์ด STM32 ให้เราเอง ในที่นี้จะเป็น STM32F1 128K flash memory แต่ของบางคนอาจจะเป็น 64K ก็ได้

  5. ต่อไปหลังจากกด Next มา ให้เราเลือกไฟล์ .bin ที่เราโหลดมาตอนแรก แล้วกด Next โปรแกรมก็จะทำการ Flash boot loader เข้าไปยังบอร์ด STM32


  6. เมื่อ Flash เสร็จเรียบร้อยแล้วเราก็กด Close ได้เลย ตอนนี้เราก็จะได้ STM32 ที่มี Arduino boot loader แล้ว

ต่อไปเราจะมาทำให้ Arduino IDE สามารถเขียนโปรแกรมบอร์ด STM32 ได้

  1. ถ้าใครยังไม่ได้ติดตั้ง Arduino IDE ก็ให้เข้าไปดาวน์โหลดและติดตั้งได้ที่ลิ้งค์นี้
    Arduino IDE Software

  2. ดาวน์โหลดแพกเกจที่จำเป็นสำหรับบอร์ด STM32 โดยให้เราเปิด Arduino IDE ขึ้นมา กดไปที่ File -> Preferences เมื่อกดแล้วจะโชว์หน้าต่างตามรูป ให้เราดูตรงส่วน Additional Boards Manager URLs แล้วก๊อปข้อความนี้ใส่เข้าไป แล้วกด OK

    http://dan.drown.org/stm32duino/package_STM32duino_index.json

  3. ต่อไปให้กดไปที่ Tool -> Boards -> Board Manager จากนั้นจะมีหน้าต่าง Boards manager ขึ้นมาให้เราหาคำว่า "STM32F1" ในช่องค้นหา แล้วติดตั้งแพกเกจที่แสดงขึ้นมา

ทดสอบโปรแกรม STM32 (Blue Pill) ผ่านพอร์ต USB

ให้เราถอด FTDI ออก แล้วต่อแค่สาย Micro-USB ของบอร์ด STM32 เข้ากับคอมพิวเตอร์ ตามรูป ต้องเช็คว่าตัวจั้มเปอร์ boot 0 อยู่ตรงที่ 0 (Operating mode) ต่อจากนี้เราก็ไม่ต้องสลับตัวจั้มเปอร์เพื่ออัพโหลดกับรันโปรแกรมแล้ว

ตอนนี้คอมพิวเตอร์ก็จะเห็นบอร์ด STM32 เป็น COM port แล้ว โดยให้เราเข้าไปดูที่ Device manager และเช็คว่าตอนนี้ต่ออยู่กับ COM ที่เท่าไหร่ ในที่นี้จะเชื่อมต่อเข้ากับ COM8 และมีชื่อว่า Maple Mini (สำหรับใครที่ไม่ขึ้นชื่อนี้แสดงว่าอาจจะลืมลงไดรว์เวอร์)

ไปที่ Tools-> Board แล้วเลือกหา Generic STM32F103C series แล้วก็ให้เราตั้งค่า Variant เป็น 64K Flash, CPU speed เป็น 72MHz และเปลี่ยน Upload method เป็น STM32duino bootloader แล้วจึงเลือก COM port ให้ตรงกับใน Device manager

ตอนนี้ Arduino IDE ก็พร้อมที่จะโปรแกรมบอร์ด STM32 แล้ว ให้เรามาลองอัพโหลดไฟล์ตัวอย่าง Blink Program เพื่อเช็คว่าทุกอย่างทำงานได้ โดยเข้าไปที่ File -> Examples -> A_STM32_Examples -> Digital -> Blink

ในตัวอย่างนี้ที่เราเปิดมา เราจะต้องแก้นิดหน่อย โดยปกติแล้วโปรแกรมจะสั่งไปที่ขาพิน PB1 แต่ว่าบอร์ด STM32 Blue pill นั้นจะอยู่ที่ขาพิน PB13 ดังนั้นก็ให้เปลี่ยนทั้งหมดที่เป็น PB1 แทนด้วย PC13

void loop()
{
    digitalWrite(PC13, HIGH);   // turn the LED on
    delay(1000);              // wait for a second
    digitalWrite(PC13, LOW);    // turn the LED off
    delay(1000);              // wait for a second
}

ในฟังก์ชั่น loop โปรแกรมจะทำการสั่งให้หลอดไฟ LED ติด - ดับ สลับกัน และหน่วงเวลาอย่างละ 1000 ms หรือ 1 วินาที

ให้เรากดที่ปุ่ม Upload บน Arduino IDE และโปรแกรมจะคอมไพล์แล้วอัพโหลดเข้าไปยังบอร์ด STM32 ถ้าทุกอย่างทำงานถูกต้อง จะเห็นข้อความเหล่านี้ออกมาทาง Arduino IDE console

ถ้าโปรแกรมอัพโหลดเรียบร้อย เราจะเห็นหลอดไฟ LED กระพริบ ติด - ดับ ทุก 1 วินาที เราสามารถลองเพิ่มหรือลองลดเวลาได้ ตอนนี้เราก็สามารถที่จะเขียนโปรแกรม STM32 (Blue Pill) ได้เหมือนกับบอร์ด Arduino ทั่วๆไปแล้ว ดูตัวอย่างการเขียนได้ใน Examples

REF: circuitdigest.com



Sign in to leave a comment