LinkedIn YouTube Facebook
Szukaj

Wstecz
Artykuły

[2] Tworzenie aplikacji .NET MF dla STM32F429I-DISCOVERY

Szkielet pierwszej aplikacji

Na początek stworzymy klasyczną pierwszą aplikację mikrokontrolerową, czyli miganie diodami. Zaczynamy od utworzenia nowego projektu, wybieramy w menu File>New Project, następnie w lewej części okienka wybieramy Installed>Visual C#>Micro Framework, teraz w prawej części okna klikamy Console Application, wypełniamy jeszcze pole Name, zatwierdzamy przyciskiem OK (rys. 1).

Rys. 1. Okno kreatora nowego projektu

Po utworzeniu projektu z prawej strony okna Visual Studio zobaczymy narzędzie nazwane Solution Explorer, posłuży nam ono m.in. do zarządzania plikami projektów (rys. 2).

Rys. 2. Okno Solution Explorer

Aby umożliwić uruchomienie aplikacji na naszej płytce musimy:

  • kliknąć prawym klawiszem w Solution Explorerze na pozycji References, wybrać Add Reference i w zakładce .NET kliknąć dwukrotnie w pozycję Microsoft.SPOT.Hardware,
  • kliknąć w Solution Explorerze prawym klawiszem nazwę projektu, wybrać z menu Add>Existing Item i wskazać plik STM32F429I_Discovery.Netmf.Hardware.cs znajdujący się w katalogu STM32F429I_Discovery.Netmf.Hardware archiwum STSW-STM32141,
  • kliknąć w Solution Explorerze prawym klawiszem nazwę projektu, wybrać z menu Properties, otworzyć zakładkę .NET Micro Framework, w polu Transport wybrać USB, w polu Device powinniśmy zobaczyć STM32F429I_DISCOVERY_a7e70ea2 (rys. 3).

Rys. 3. Okno właściwości projektu

Najważniejszym dla nas plikiem projektu jest program.cs, aby go otworzyć kliknij dwukrotnie nazwę tego pliku w oknie Solution Explorer, jego zawartość wygląda tak:

using System;
using Microsoft.SPOT;

namespace MFPrzykladLED
{
    public class Program
    {
        public static void Main()
        {
            Debug.Print(
                Resources.GetString(Resources.StringResources.String1));
        }

    }
}

Mamy tu utworzoną przez kreatora projektu przestrzeń nazw MFPrzykladLED, w niej klasę Program, a w tej klasie statyczną funkcję Main, czyli najprostszy możliwy program wyświetlający napis „Hello World!”. Żeby nie zarzucać Czytelnika zbyt dużą ilością informacji naraz proponuję zmodyfikować zawartość funkcji Main do postaci:

Debug.Print(„Hello World!”);

Wynik działania programu nie zmieni się, a pozwoli to ominąć na razie temat zasobów (resources) w C#.

Wyjaśnienia wymagają dwa pierwsze wiersze pliku program.cs:

using System;
using Microsoft.SPOT;

Słowo kluczowe using pozwala nam poinformować kompilator z jakich przestrzeni nazw będziemy korzystać, nie jest to konieczne, ale ułatwia pisanie programów, ponieważ np. wywołanie funkcji Microsoft.SPOT.Debug.Print możemy w tym przypadku skrócić do Debug.Print.

Skoro wiemy już mniej więcej co i jak, możemy przystąpić do uruchomienia programu, w tym celu naciskamy F5, w oknie Output powinniśmy po chwili zobaczyć tekst „Hello world!” (jeśli po uruchomieniu programu okienko Output nie jest widoczne wystarczy nacisnąć Alt+2, wtedy się pojawi.

Jak zaświecić diodę?

Jeśli mamy już szkielet działającej aplikacji możemy przystąpić do realizacji celu, czyli migania diodami naszej płytki. W tym celu musimy zajrzeć do pliku STM32F429I_Discovery.Netmf.Hardware.cs, widzimy w nim zdefiniowaną przestrzeń nazw STM32F429I_Discovery.Netmf.Hardware, a w niej między innymi klasę LED, którą musimy wykorzystać, aby kontrolować diody. Interesujące nas elementy tej klasy to:

  • LEDInit – funkcja, która konfiguruje linie GPIO do pracy z diodami
  • GreenLedOn, GreenLedOff, GreenLedToggle – zestaw funkcji kontrolujących zieloną diodę
  • RedLedOn, RedLedOff, RedLedToggle – zestaw funkcji kontrolujących czerwoną diodę

Co istotne powyższe funkcje są statyczne, więc nie musimy tworzyć obiektu tej klasy.

Aby zobaczyć efekt działania naszego programu przydałaby się jeszcze funkcja opóźniająca, tu z pomocą przychodzi przestrzeń nazw System.Threading, która zawiera klasę Thread zawierającą funkcję Sleep przyjmującą jeden parametr – opóźnienie w milisekundach. Podsumowując nasz program wygląda teraz tak:

using System.Threading;
using STM32F429I_Discovery.Netmf.Hardware;
using Microsoft.SPOT;

namespace MFPrzykladLED
{
    public class Program
    {
        public static void Main()
        {
            LED.LEDInit();
            while (true)
            {
                LED.RedLedOn();
                LED.GreenLedOff();
                Thread.Sleep(500);
                Debug.Print("Tik");

                LED.RedLedOff();
                LED.GreenLedOn();
                Thread.Sleep(500);

                Debug.Print("Tak");                
            }
        }
    }
}