บางท่านคงเคยได้ยินโครงการ Netduino ที่เป็นโครงการที่ทำบอร์ดที่ใช้ .Net ในการพัฒนาโปรแกรมบนไมโครคอนโทรลเลอร์ โดยได้ใช้ Framework ชื่อ .Net Micro Framework (NETMF) ของ Microsoft ในการจัดการ โดยเจ้า NETMF ได้ถูกออกแบบมาให้ใช้ในอุปกรณ์ที่มีทรัพยากรน้อย ดังนั้นจึงมีผู้พัฒนาพยายามให้ Framework ตัวนี้ใช้ได้กับอุปกรณ์ต่างๆ ไม่เว้นแม้กระทั่ง STM32 ซึ่งเป็นสถาปัตยกรรม ARM โดยวันนี้เราจะนำเจ้าบอร์ด STM32F4 Discovery ที่มีราคาถูก มาลองเขียนบน C# .Net กันบ้างครับ
ปล1. ผมไม่แน่ใจว่าเจ้าตัว NETMF ใช้ได้เฉพาะกับ C# อย่างเดียวหรือใช้ได้กับภาษาอื่นด้วยนะครับ หากท่านใดได้ลองในภาษาอื่นก็มาบอกเล่ากันได้นะครับ
ปล2. หากมีข้อผิดพลาดประการใดก็ขออภัยมา ณ ที่นี้ด้วยครับ
หาให้ครบก่อนลุย~~
สิ่งสำคัญที่ต้องมีก่อนเลย คือ
- STM32F4 Discovery board (ไม่มีจะเขียนไงฟะ)
- สาย Mini-USB
- สาย Micro-USB
Mini-USB and Micro-USB
- STM32 ST-LINK Utility (ถ้าใครเคยเขียนโปรแกรมบนเจ้าบอร์ดนี้คงมีอยู่แล้วนะครับ ใครไม่มีโหลดเลย)
Download - Bootloader สำหรับ STM32 F4 Discovery
Download - Driver สำหรับ Bootloader ครับ
Download - NETMF for STM32 (F4 Edition) Release 4.2 QFE2 RTM
Download - Visual studio C# 2010 (ย้ำอีกทีนะครับ เวอร์ชั่น 2010 เท่านั้น เนื่องจาก Bootloader ที่จะใช้ Support แค่ .NET Micro Framework 4.2 เท่านั้น ) ใครยังไม่มีโหลดเลยครับ
Download
โอเคครับ องค์ประกอบค่อนข้างจะเยอะหน่อย แต่คงจะหามาครบกันแล้ว ดังนั้นจัดการ Install ทุกอย่างลงบนเครื่องเลยครับ
ขั้นตอนแรก
เราต้องทำการ Burn Bootloader ลงไปก่อนโดยมีขั้นตอนดังต่อไปนี้ครับ
- เสียบสาย “Mini-USB” เข้ากับบอร์ดครับ (บางคนคงบอกว่าไม่เสียบจะใช้ได้หรอฟะ เอาเป็นว่าอันนี้เผื่อว่าคนไม่รู้เสียบผิดอัน 555)
- จากนั้นก็จัดการลงไตร์เวอร์จากในโฟลเดอร์ของ STM32 ST-LINK Utility
ถ้าเป็น Path ปกติจะอยู่ในนี้ครับ -> C:\Program Files (x86)\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility - หลังจากลงไดร์เวอร์ได้แล้วเราจะทำการลบ Flash ทั้งหมด โดยใช้โปรแกรม STM32 ST-LINK Utility ครับ
– ก่อนอื่นจำเป็นต้อง Connect กับ Board ก่อนครับ กดปุ่ม
– จากนั้นให้เลือกที่ Target -> Erase Chip แลัวก็รอจนเสร็จครับ
– แล้ว Target -> Erase Sector อีกรอบ เมือมีหน้าต่างขึ้นมากด Select All แล้วกด Apply เลยครับ
- จากนี้ไปเราจะทำการ Program Bootloader ลงบน Chip นะครับ
– ก่อนอื่นแตกไฟล์ Bootloader ก่อนครับ เมื่อแตกออกมาจะเห็น 3 ไฟล์ดังนี้ครับ ER_CONFIG.hex, ER_FLASH.hex, Tinybooter.hex
– จากนั้นที่โปรแกรม STM32 ST-LINK Utility ให้เลือก Target->Program & Verify… ครับ
– เลือกไฟล์ Tinybooter.hex กด Open แลัวกด Program เลยครับ
– จากนั้นกด Disconnectครับ แล้วกดปุ่ม Reset ที่บอร์ด จะเห็นว่ามีไฟสว่างขึ้นมา 3 ดวงที่บอร์ดนะครับ
- ทำการต่อ Micro-USB เข้าที่บอร์ด แล้วลงไดร์เวอร์ที่โหลดมาในหัวข้อที่ 6 นะครับ
- หลังจากที่เราลง NETMF for STM32 (F4 Edition) Release 4.2 QFE2 RTM เรียบร้อยแล้วจะมีโปรแกรมชื่อว่า MFDeploy.exe (ลอง Search ดูก็ได้นะครับ) ให้เปิดขึ้นมาครับ
– ให้เลือก Device เป็น USB จากนั้นลองกด Ping ครับ จะมีชื่อบอร์ดขึ้นคล้ายกับบนรูป
– กด Browse เลือก อีกสองไฟล์ที่เลือกจากที่เราโปรแกรม Bootloader (ER_CONFIG.hex, ER_FLASH.hex)
– จากนั้นกด Deploy - ยินดีด้วยครับคุณได้บอร์ดสำหรับเขียนโปรแกรมบน .Net แล้ว
ลงมือเขียนโปรแกรมกันเถอะ
- เปิดโปรแกรม Visual studio C# 2010 ขึ้นมา
– จากนั้นกด New Project…
– ตรง Template ให้เลือก Micro Framework
– เลือกสร้างโปรเจคเป็น Console Application ตั้งชื่อโปรเจคแล้วกด OK - ทำการ Setting โดย
– เลือกคลิกขวาที่ Project แล้วเลือก Properties– แถบด้านข้างให้เลือก .Net Micro Framework แล้วเลือก Transport เป็น USB
– คลิกขวาที่ Reference กด Add Reference เลือก Microsoft.SPOT.Hardware แล้วกด OK
- ทดลองกับโค้ดด้านล่างครับ
using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
namespace test
{
public class Program
{
public static void Main()
{
OutputPort led_green = new OutputPort((Cpu.Pin) 60, false); //PD12 on discovery board
OutputPort led_orange = new OutputPort((Cpu.Pin) 61, false); //PD13 on discovery board
OutputPort led_red = new OutputPort((Cpu.Pin) 62, false); //PD14 on discovery board
OutputPort led_blue = new OutputPort((Cpu.Pin) 63, false); //PD15 on discovery board
while (true)
{
led_green.Write(true);
Thread.Sleep(100);
led_green.Write(false);
led_orange.Write(true);
Thread.Sleep(100);
led_orange.Write(false);
led_red.Write(true);
Thread.Sleep(100);
led_red.Write(false);
led_blue.Write(true);
Thread.Sleep(100);
led_blue.Write(false);
}
}
}
}
- จากนั้นกด Ctrl+F5 ก็จะเห็นไฟวิ่งไปโลดแล่นอยู่บนบอร์ดของเราเรียบร้อยครับ ^^
ส่วนใครขี้เกียจที่จะ Setting ค่าต่างๆ ของ Project เรามีตัวอย่าง Project ให้ตรงนี้ครับ
Download
เอกสารต่างๆ โหลดได้ตรงนี้นะครับ
Slide
IO Mapping
Technical Notes