.Net Micro Framework ist eine Technologie, mit der Sie Anwendungen für Mikrocontroller mit der vollen Leistung von verwaltetem Code und Visual Studio schreiben können. Sie existiert seit langer Zeit und erlebt jetzt eine Wiedergeburt. Um dieses herum wurde ein Open-Source-Projekt gebildet, das kürzlich zu GitHub gewechselt ist. Dies ist jedoch noch kein "Boxed" -Produkt. Die Arbeit mit .Net Micro Framework erfordert bestimmte Fähigkeiten. Das letzte Mal habe ich darüber geschrieben, wie man eine einfache "Hello World" -Anwendung auf dem Emulator für Windows erstellt und ausführt. Jetzt werden wir darüber sprechen, wie man mit .Net Micro Framework auf der realen Hardware - STM32F4Discovery Debug Board - arbeitet.Die Gebühr ist durchaus üblich und kann beispielsweise hier erworben werden . Ab Version 4.4 ist der Port für diese Karte in der netmf-Interpreter- Distribution enthalten . Zuvor existierte es als separates Projekt .Im Internet und insbesondere auf dem Hub finden Sie auf dieser Karte Materialien zum Starten des .Net Micro Framework. Zum einen geht es jedoch um Version 4.3, zum anderen wird bereits die fertige Assembly verwendet. Ich werde ausführlich über das Kompilieren und Ausführen von STM32F4Discovery .Net Micro Framework Version 4.4 sprechen. Der Artikel wird lang sein, da mehrere Fehler im Distributionskit behoben und mehrere Dienstprogramme und Treiber heruntergeladen und installiert werden müssen.Zusammenstellungsvorbereitung
Verteilung
Zunächst müssen Sie die Distribution selbst haben.Das Repository ist hier . Sie können es als Zip-Archiv herunterladen oder mit git herunterladen. Anweisungen in englischer Sprache zum Abrufen des Repositorys und zum Sammeln von Installationsdateien finden Sie hier . Basierend auf diesen Anweisungen wurde ein Artikel geschrieben. Die Versionen des Repositorys, die bestimmten Releases zugeordnet sind, können hier aus den Zip-Archiven heruntergeladen werden .Um das Repository mit git abzurufen, müssen Sie folgende Schritte ausführen:- Erstellen Sie eine öffentliche Kopie Ihres Kontos auf GitHub-Servern mit Fork . Alle Pull- Anfragen müssen aus dem öffentlichen GitHub-Repository stammen.
- , clone. , :
git clone github.com/<your GitHub ID>/netmf-interpreter.git
: . , D:\NETMF\repo
, repo
— . .
- , Upstream. pull pull. Upstream :
git remote add upstream https:
Wichtig : Anforderungen für den lokalen Pfad (es muss mindestens ein übergeordneter Ordner vorhanden sein - siehe Abschnitt 2 der Arbeit mit git) sind auch beim Entpacken des Repositorys aus dem Archiv relevant.Leider enthält die Version von .NET Micro Framework v4.4 Release To Web (RTW) Fehler, mit denen Sie Installationsdateien nicht sofort aus dem Repository erfassen können. Diese Fehler können jedoch korrigiert werden, und dann werde ich Ihnen sagen, wie es geht.Nachdem das Repository auf die eine oder andere Weise in einen lokalen Ordner kopiert wurde, müssen Sie folgende Schritte ausführen:- Laden Sie die Zip-Datei für binäre Tools herunter . Diese Datei enthält die Dienstprogramme, die zum Erstellen von Installationsdateien und „Ports“ für Geräte erforderlich sind. In Zukunft ist geplant, diese Dienstprogramme aufzugeben, aber bisher werden sie benötigt.
- binary tools zip- .
D:\NETMF\repo
, repo
— , bin
tools
D:\NETMF
. - :
<repo folder>\Framework\Tools\BuildTasksInternal\BuildSigner\BuildSignerSpotBuild.csproj
37
<HintPath>$(MSBuildProgramFiles32)\Microsoft Internal\Codesign.Submitter\CODESIGN.Submitter.dll</HintPath>
<HintPath>$(SPOROOT)\tools\x86\CODESIGN\CODESIGN.Submitter.dll</HintPath>
. . , .Net Micro Framework open source , , , . .NET Micro Framework v4.4 Release To Web (RTW). . . - CMSIS
<repo folder>\MSIS.
, <repo folder>\MSIS\ReadMe.md.
CMSIS Cortex Microcontroller Software Interface Standart. Cortex-M, — ARM. “” .
.Net Micro Framework 4.4 CMSIS 4.3. zip- (CMSIS-SP-00300-r4p3-00rel0.zip). ARM. <repo folder>\MSIS
. - .Net Micro Framework Cryptographic Libraries. , . . , , , .
msi . ( <crypto install folder>
), , D:\NETMF\repo
D:\NETMF\repo_master
.
Die Verteilung ist eine komplexe Struktur mit einer Vielzahl von Querverweisen. Kombiniert all dies mit einem Projekt für MSBuild . Projektdateien sehen aus wie die bekannten sln- und proj-Dateien für Visual Studio, haben jedoch eine komplexere Struktur. Aus diesem Grund schlägt die Verwendung von Visual Studio für die Assembly fehl.In den folgenden Artikeln werde ich Ihnen mehr über die Komponenten und Beziehungen innerhalb der Distribution erzählen. Jetzt müssen Sie jedoch wissen, dass sich der Port für STM3F4Discovery im Ordner befindet<repo folder>\Solutions\STM32F4DISCOVERY
und die gesammelten Binär- und Hex-Dateien im Ordner angezeigt werden<repo folder>\BuildOutput
Visuelles Studio
MSBuild ist Teil von Visual Studio. In der Dokumentation zu .netmf Interpreter 4.4 wird angegeben, dass Visual Studio 2015 Community-, Pro- und Ultimate-Editionen unterstützt werden. Sie müssen daher eine davon installieren, um den Port erfolgreich zu erstellen.ARM-Compiler
Als nächstes benötigen Sie einen Compiler für ARM . Die Arbeit mit zwei Compilern wird bereitgestellt:Der RealView-Compiler ist Teil des Keil MDK- Entwicklungstools . Die kostenlose Version hat ein Limit von 32 KB Code, aber der Port hat ein größeres Volumen, sodass Sie auf jeden Fall eine Lizenz benötigen, z. B. eine 7-Tage-MDK-Professional-Testlizenz . Informationen zur Installation von Keil MDK 5 finden Sie hier .Es sollte standardmäßig im Ordner installiert sein C:\Keil_v5
.GCC ist kostenlos, aber die von ihm generierte Firmware ist 10% größer als die vom RealView-Compiler generierte. GCC ARM Embedded kann als Archiv heruntergeladen und an einen beliebigen Ort entpackt werden. Den Ordner mit dem entpackten Inhalt des Archivs werde ich weiter aufrufen <gcc folder>
.Kompilieren mit ARM RealView-Kompilierungswerkzeugen
Das Distributionskit hat bereits Kompilierungseinstellungen für die Versionen MDK 3.1, 3.80a, 4.12, 4.13, 4.54, 5.04, 5.05 vorgenommen. Wenn Sie eine andere Version verwenden müssen, können Sie der Datei mehrere Zeilen hinzufügen.<repo folder>\tools\Targets\Microsoft.Spot.system.mdk.targets
Ich habe Version 5.06 verwendet. Dazu nach den Zeilen<CC Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.05'">"$(MDK_TOOL_PATH)\ARMCC\bin\armcc.exe"</CC>
<CPP Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.05'">"$(MDK_TOOL_PATH)\ARMCC\bin\armcc.exe"</CPP>
<AS Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.05'">"$(MDK_TOOL_PATH)\ARMCC\bin\armasm.exe"</AS>
<LINK Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.05'">"$(MDK_TOOL_PATH)\ARMCC\bin\armlink.exe"</LINK>
<AR Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.05'">"$(MDK_TOOL_PATH)\ARMCC\bin\armar.exe"</AR>
<FROMELF Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.05'">"$(MDK_TOOL_PATH)\ARMCC\bin\fromelf.exe"</FROMELF>
<MdkCrtLibLinkSwitch Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.05'">$(MdkCrtLibLinkSwitch) $(SWTC)libpath $(MDK_TOOL_PATH)\ARMCC\LIB</MdkCrtLibLinkSwitch>
Ich habe die Zeilen hinzugefügt<CC Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.06'">"$(MDK_TOOL_PATH)\ARMCC\bin\armcc.exe"</CC>
<CPP Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.06'">"$(MDK_TOOL_PATH)\ARMCC\bin\armcc.exe"</CPP>
<AS Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.06'">"$(MDK_TOOL_PATH)\ARMCC\bin\armasm.exe"</AS>
<LINK Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.06'">"$(MDK_TOOL_PATH)\ARMCC\bin\armlink.exe"</LINK>
<AR Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.06'">"$(MDK_TOOL_PATH)\ARMCC\bin\armar.exe"</AR>
<FROMELF Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.06'">"$(MDK_TOOL_PATH)\ARMCC\bin\fromelf.exe"</FROMELF>
<MdkCrtLibLinkSwitch Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.06'">$(MdkCrtLibLinkSwitch) $(SWTC)libpath $(MDK_TOOL_PATH)\ARMCC\LIB</MdkCrtLibLinkSwitch>
Jetzt können Sie mit dem Kompilieren beginnen. Sie müssen die Befehlszeile öffnen und zum Ordner mit dem Repository wechseln, zum Beispiel wie folgt:cd /d D:\WORKDIR\NetMf\NetMFRepo\repo
Dann müssen Sie die Umgebungsvariablen wie folgt festlegen:setenv_mdk 5.06
Gehen Sie dann zu dem Ordner mit dem Port ( <repo folder>\Solutions\STM32F4DISCOVERY
). Zum Beispiel wiecd /d D:\WORKDIR\NetMf\NetMFRepo\repo\Solutions\STM32F4DISCOVERY
folgt : Jetzt können Sie die Kompilierung beispielsweise mit dem folgenden Befehl starten :msbuild dotnetmf.proj /p:flavor=release /fl
wheremsbuild
- Aufruf zum Starten des Assemblydotnetmf.proj
- Port - Projekts für STM32F4DISCOVERY/p:flavor=release
- Assemblytyp (debug / release / rtm)/fl
- Schreiben des Assemblyprotokolls in eine Datei.Die Protokolldatei befindet sich im aktuellen Ordner (im Beispiel dies D:\WORKDIR\NetMf\NetMFRepo\repo\Solutions\STM32F4DISCOVERY
). Wenn das Protokoll nicht benötigt wird, /fl
können Sie es entfernen.Um alle Kompilierungsoptionen anzuzeigen, müssen Sie ausgeführt werden. Diemsbuild /t:help
Kompilierung dauert lange und dauert 10 Minuten:
Das Ergebnis sind viele Dateien, aus denen Sie Folgendes benötigen:<repo folder>\BuildOutput\THUMB2FP\MDK5.06\le\FLASH\release\STM32F4DISCOVERY\bin\Tinybooter.hex\
<repo folder>\BuildOutput\THUMB2FP\MDK5.06\le\FLASH\release\STM32F4DISCOVERY\bin\tinyclr.hex\ER_CONFIG
<repo folder>\BuildOutput\THUMB2FP\MDK5.06\le\FLASH\release\STM32F4DISCOVERY\bin\tinyclr.hex\ER_FLASH
Für einen sauberen Build müssen Sie vor dem Ausführen eines Befehlsmsbuild dotnetmf.proj /p:flavor=release /fl
den Befehl ausführenmsbuild /t:clean
oder den Ordner löschen<repo folder>\BuildOutput

Kompilieren mit GCC ARM Embedded
Die Verwendung von GCC erfordert möglicherweise eine weitere Überarbeitung. In der Datei: Sie müssen<repo folder>\Solutions\STM32F4DISCOVERY\STM32F4DISCOVERY.settings
nach der Zeile<NO_BOOTLOADER_COMPRESSION>true</NO_BOOTLOADER_COMPRESSION>
hinzufügen .<PLATFORM_EMULATED_FLOATINGPOINT Condition="'$(COMPILER_TOOL)'=='GCC'">true</PLATFORM_EMULATED_FLOATINGPOINT>
Dies behebt den Fehler "NNNN.a verwendet VFP-Registerargumente" . Lesen Sie hier mehr .Dieser Fehler tritt jedoch möglicherweise nicht auf, wenn Sie einen "sauberen" Build verwenden.Für einen sauberen Build müssen Sie vor dem Ausführen des Befehls den Befehl ausführen oder den Ordner löschen. Um den Port zu erfassen, öffnen Sie die Befehlszeile und wechseln Sie zum Ordner mit dem Repository, beispielsweise wie folgt: Anschließend müssen Sie Umgebungsvariablen festlegen, indemmsbuild dotnetmf.proj /p:flavor=release /fl
Sie Folgendes ausführen : Wo befindet sich die gcc-Version? Der Pfad, in dem sich GCC ARM befindet Eingebettet Der Befehl sieht möglicherweise folgendermaßen aus:msbuild /t:clean
<repo folder>\BuildOutput

cd /d D:\WORKDIR\NetMf\NetMFRepo\repo
setenv_gcc <gcc ver> <gcc folder>
<gcc ver>
<gcc folder>
setenv_gcc 4.9.3 D:\WORKDIR\NetMf\gcc_4_9_3
Gehen Sie dann zu dem Ordner mit dem Port ( <repo folder>\Solutions\STM32F4DISCOVERY
). Beispiel: Diecd /d D:\WORKDIR\NetMf\NetMFRepo\repo\Solutions\STM32F4DISCOVERY
Kompilierung kann beispielsweise mit dem folgenden Befehl gestartet werden:msbuild dotnetmf.proj /p:flavor=release /fl
wheremsbuild
- Rufen Sie an, um die Montage zu startendotnetmf.proj
- Portdesign für STM32F4DISCOVERY/p:flavor=release
- Build-Typ (Debug / Release / RTM)/fl
- Schreiben Sie das Assembly-Protokoll in eine Datei.
Die Protokolldatei befindet sich im aktuellen Ordner (im Beispiel dies D:\WORKDIR\NetMf\NetMFRepo\repo\Solutions\STM32F4DISCOVERY
). Wenn das Protokoll nicht benötigt wird, /fl
können Sie es entfernen.Um alle Kompilierungsoptionen anzuzeigen, müssen Sie dies tun. Diemsbuild /t:help
Kompilierung dauert lange und dauert 10 Minuten:
Das Ergebnis sind viele Dateien, aus denen Sie Folgendes benötigen:<repo folder>\BuildOutput\THUMB2FP\GCC4.9\le\FLASH\release\STM32F4DISCOVERY\bin\Tinybooter.hex
<repo folder>\BuildOutput\THUMB2FP\GCC4.9\le\FLASH\release\STM32F4DISCOVERY\bin\tinyclr.hex\ER_CONFIG
<repo folder>\BuildOutput\THUMB2FP\GCC4.9\le\FLASH\release\STM32F4DISCOVERY\bin\tinyclr.hex\ER_FLASH
Board-Firmware
Somit gibt es 3 Dateien :Tinybooter.hex, ER_CONFIG ER_FLASH
.Tinybooter
Ist ein Bootloader. Sie werden für die CLR-Firmware verwendet. ER_CONFIG
und ER_FLASH
das ist die CLR selbst.Um das Board zu flashen, benötigen wir zusätzliche Software:- STM32 ST-LINK Utility - ein Programmierer zum Flashen von TinyBooter.
- Installierte MicroFraimworkSDK.MSI und NetMFVS14.vsix - die erste enthält die erforderlichen Bibliotheken und Dienstprogramme, die zweite - Vorlagenprojekte .Net Micro Fraimwork für Visual Studio.
- USB-Treiber erforderlich, damit Dienstprogramme von MicroFraimworkSDK die Karte sehen können (für Windows 10 nicht erforderlich).
Gehen Sie wie folgt vor, um die Karte zu flashen:- Verbinden Sie die Karte über ein Mini-USB-Kabel mit dem Computer:

- Starten Sie das STM32 ST-LINK-Dienstprogramm und wählen Sie das Menü Ziel-> Verbinden:

Nach dem Verbinden mit der STM32- Karte sieht das ST-LINK-Dienstprogramm ungefähr so aus:

- Target->Erase Sectors...:

Select All Apply:

flash :

STM32 ST-LINK Utility :

- TinyBooter.hex Target-> Program & Verify...:

tinybooter.hex Start:

STM32 ST-LINK Utility :

- miniUsb Reset
- microUSB :

STM32 ST-LINK Utility . miniUsb .
- Windows 10 , USB :

- .NET Micro Framework Deployment Tool.
MicroFrameworkSDK:
C:\Program Files (x86)\Microsoft .NET Micro Framework\v4.4\Tools\MFDeploy.exe
Serial USB:

. TinyBooter Ping. Pinigng… TinyBooter

- .NET Micro Framework Deployment Tool 2 ER_CONFIG ER_FLASH. Browse…

Deploy:

Ping CLR :

, .
Visual Studio
Jetzt können Sie das Projekt in Visual Studio erstellen und ausführen. Lassen Sie uns ein einfaches blinkendes Projekt erstellen, bei dem die LEDs blinken.Wir starten Visual Studio und erstellen ein neues Projekt:
Wenn das SDK und vsix korrekt installiert wurden, wird eine neue Micro Framework-Projektvorlage angezeigt. Konsolenanwendung auswählen:
Nach dem Erstellen der Lösung können Sie zu den Projekteigenschaften wechseln: Wählen Sie
in den Projekteinstellungen auf der Registerkarte .NET Micro Framework im Feld Transport die Option USB aus. Danach sollte der Name der Karte im Feld Gerät angezeigt werden:
Speichern und schließen Sie die Einstellungen.Fügen Sie als Nächstes der Assembly Refrence hinzu unter:C:\Program Files (x86)\Microsoft .NET Micro Framework\v4.4\Assemblies\le\Microsoft.SPOT.Hardware.dll
Der letzte Schritt besteht darin, den Code durch Folgendes zu ersetzen program.cs
:using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
namespace STM32F4DISC_Test
{
public class Program
{
public static void Main()
{
OutputPort ledGreen = new OutputPort((Cpu.Pin)60, false);
OutputPort ledYellow = new OutputPort((Cpu.Pin)61, false);
OutputPort ledRed = new OutputPort((Cpu.Pin)62, false);
OutputPort ledBlue = new OutputPort((Cpu.Pin)63, false);
while (true)
{
ledGreen.Write(true);
Thread.Sleep(500);
ledYellow.Write(true);
Thread.Sleep(500);
ledRed.Write(true);
Thread.Sleep(500);
ledBlue.Write(true);
Thread.Sleep(500);
ledGreen.Write(false);
ledYellow.Write(false);
ledRed.Write(false);
ledBlue.Write(false);
Thread.Sleep(500);
}
}
}
}
Wir starten das Projekt:
Und nach einigen Sekunden beginnen die LEDs auf der Platine zu blinken.Fazit
.NET Micro Fraimwork ist ein ziemlich kompliziertes Projekt. Derzeit sind noch bestimmte Fähigkeiten und Kenntnisse erforderlich, insbesondere bei der Arbeit mit dem Repository. In diesem Artikel habe ich so ausführlich wie möglich darüber gesprochen, was Sie beim Kompilieren von Ports tun müssen, da diese Informationen bei der Entwicklung von Lösungen für Ihre eigenen Boards hilfreich sind.Das Ausführen von .NET Micro Fraimwork auf STM32F4Discovery kann jedoch einfacher und schneller sein, indem vorgefertigte Dateien Tinybooter.hex, ER_CONFIG und ER_FLASH verwendet werden. Sie können sie hier herunterladen .