was successfully added to your cart.

เห้ย!! .Net เขียนคอนโทรลเลอร์ได้ด้วยเหรอ

By June 14, 2013General

WP_20130614_013            

บางท่านคงเคยได้ยินโครงการ Netduino ที่เป็นโครงการที่ทำบอร์ดที่ใช้ .Net ในการพัฒนาโปรแกรมบนไมโครคอนโทรลเลอร์ โดยได้ใช้ Framework ชื่อ .Net Micro Framework (NETMF)  ของ Microsoft ในการจัดการ โดยเจ้า NETMF ได้ถูกออกแบบมาให้ใช้ในอุปกรณ์ที่มีทรัพยากรน้อย ดังนั้นจึงมีผู้พัฒนาพยายามให้ Framework ตัวนี้ใช้ได้กับอุปกรณ์ต่างๆ ไม่เว้นแม้กระทั่ง STM32 ซึ่งเป็นสถาปัตยกรรม ARM โดยวันนี้เราจะนำเจ้าบอร์ด STM32F4 Discovery ที่มีราคาถูก มาลองเขียนบน C# .Net กันบ้างครับ

ปล1. ผมไม่แน่ใจว่าเจ้าตัว NETMF ใช้ได้เฉพาะกับ C# อย่างเดียวหรือใช้ได้กับภาษาอื่นด้วยนะครับ หากท่านใดได้ลองในภาษาอื่นก็มาบอกเล่ากันได้นะครับ
ปล2. หากมีข้อผิดพลาดประการใดก็ขออภัยมา ณ ที่นี้ด้วยครับ

หาให้ครบก่อนลุย~~
สิ่งสำคัญที่ต้องมีก่อนเลย คือ

  1.  STM32F4 Discovery board (ไม่มีจะเขียนไงฟะ)
  2. สาย Mini-USB
  3. สาย Micro-USB

    Mini-USB and Micro-USB

  4. STM32 ST-LINK Utility (ถ้าใครเคยเขียนโปรแกรมบนเจ้าบอร์ดนี้คงมีอยู่แล้วนะครับ ใครไม่มีโหลดเลย)
    Download
  5. Bootloader สำหรับ STM32 F4 Discovery
    Download
  6. Driver สำหรับ Bootloader ครับ
    Download
  7. NETMF for STM32 (F4 Edition) Release 4.2 QFE2 RTM
    Download
  8. 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 ก่อนครับ กดปุ่ม connect
    – จากนั้นให้เลือกที่ Target -> Erase Chip แลัวก็รอจนเสร็จครับst1
    – แล้ว Target -> Erase Sector อีกรอบ เมือมีหน้าต่างขึ้นมากด Select All แล้วกด Apply เลยครับ
    st2
  • จากนี้ไปเราจะทำการ Program Bootloader ลงบน Chip นะครับ
    – ก่อนอื่นแตกไฟล์ Bootloader ก่อนครับ เมื่อแตกออกมาจะเห็น 3 ไฟล์ดังนี้ครับ ER_CONFIG.hex, ER_FLASH.hex, Tinybooter.hex
    st3
    – จากนั้นที่โปรแกรม STM32 ST-LINK Utility ให้เลือก Target->Program & Verify… ครับ
    – เลือกไฟล์ Tinybooter.hex กด Open แลัวกด Program เลยครับ
    – จากนั้นกด Disconnect st5ครับ แล้วกดปุ่ม Reset ที่บอร์ด จะเห็นว่ามีไฟสว่างขึ้นมา 3 ดวงที่บอร์ดนะครับst6
  • ทำการต่อ Micro-USB เข้าที่บอร์ด แล้วลงไดร์เวอร์ที่โหลดมาในหัวข้อที่ 6 นะครับ
    st7
  • หลังจากที่เราลง NETMF for STM32 (F4 Edition) Release 4.2 QFE2 RTM เรียบร้อยแล้วจะมีโปรแกรมชื่อว่า MFDeploy.exe (ลอง Search ดูก็ได้นะครับ) ให้เปิดขึ้นมาครับ
    – ให้เลือก Device เป็น USB จากนั้นลองกด Ping ครับ จะมีชื่อบอร์ดขึ้นคล้ายกับบนรูป
    – กด Browse เลือก อีกสองไฟล์ที่เลือกจากที่เราโปรแกรม Bootloader (ER_CONFIG.hex, ER_FLASH.hex)
    – จากนั้นกด Deployst8
  • ยินดีด้วยครับคุณได้บอร์ดสำหรับเขียนโปรแกรมบน .Net แล้ว

ลงมือเขียนโปรแกรมกันเถอะ

  • เปิดโปรแกรม Visual studio C# 2010 ขึ้นมา
    – จากนั้นกด New Project…
    – ตรง Template ให้เลือก  Micro Framework
    – เลือกสร้างโปรเจคเป็น Console Application ตั้งชื่อโปรเจคแล้วกด OK
    st9
  • ทำการ Setting โดย
    – เลือกคลิกขวาที่ Project แล้วเลือก Propertiesst10– แถบด้านข้างให้เลือก .Net Micro Framework แล้วเลือก Transport เป็น USBst11– คลิกขวาที่ Reference กด Add Reference เลือก Microsoft.SPOT.Hardware แล้วกด OK

    st12

  • ทดลองกับโค้ดด้านล่างครับ

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

Leave a Reply

*