Ejecutar .Net Micro Framework 4.4 en STM32F4Discovery


.Net Micro Framework es una tecnología que le permite escribir aplicaciones para microcontroladores utilizando toda la potencia del código administrado y Visual Studio. Ella existe desde hace mucho tiempo y ahora está experimentando un renacimiento. Se formó un proyecto de código abierto a su alrededor, que recientemente se mudó a GitHub. Sin embargo, este no es un producto "en caja" todavía. Trabajar con .Net Micro Framework requiere ciertas habilidades. La última vez que escribí sobre cómo crear y ejecutar una aplicación simple "Hello world" en el emulador para Windows. Ahora hablaremos sobre cómo trabajar con .Net Micro Framework en el hardware real: la placa de depuración STM32F4Discovery.

La tarifa es bastante común y se puede comprar, por ejemplo, aquí . A partir de la versión 4.4, el puerto para esta placa se incluye en la distribución del intérprete netmf. Anteriormente, existía como un proyecto separado .

En Internet, y en particular, en el centro, puede encontrar materiales sobre el lanzamiento de .Net Micro Framework en esta placa, pero en primer lugar hablan de la versión 4.3 y, en segundo lugar, ya usan el ensamblaje terminado. Hablaré sobre cómo compilar y ejecutar STM32F4Discovery .Net Micro Framework versión 4.4 con todo detalle. El artículo será largo, ya que será necesario corregir varios errores en el kit de distribución y descargar e instalar varias utilidades y controladores.

Preparación de la compilación



Distribución


En primer lugar, debe tener la distribución en sí.

El repositorio está aquí . Puede descargarlo como un archivo zip, o puede obtenerlo usando git. Aquí encontrará instrucciones en inglés sobre cómo obtener el repositorio y recopilar archivos de instalación . Basado en estas instrucciones, se escribió un artículo. Las versiones del repositorio asociadas con lanzamientos específicos se pueden descargar desde los archivos zip aquí .

Para obtener el repositorio usando git, debe hacer lo siguiente:
  1. Cree una copia pública en su cuenta en los servidores de GitHub por fork . Todas las solicitudes de extracción deben provenir del repositorio público de GitHub.
  2. , clone. , :
    git clone github.com/<your GitHub ID>/netmf-interpreter.git
    : . , D:\NETMF\repo, repo — . .
  3. , Upstream. pull pull. Upstream :
    git remote add upstream https://github.com/NETMF/netmf-interpreter.git


Importante : Los requisitos para la ruta local (debe haber al menos una carpeta principal; consulte la sección 2 de trabajo con git) también son relevantes al desempaquetar el repositorio del archivo.

Desafortunadamente, el lanzamiento de .NET Micro Framework v4.4 Release To Web (RTW) contiene errores que no le permiten recopilar inmediatamente archivos de instalación del repositorio. Sin embargo, estos errores pueden corregirse y luego le diré cómo hacerlo.
Después de que el repositorio se haya copiado en una carpeta local de una forma u otra, debe hacer lo siguiente:

  1. Descargue el archivo zip de herramientas binarias . Este archivo contiene las utilidades necesarias para construir archivos de instalación y "puertos" para dispositivos. En el futuro, se planea abandonar estas utilidades, pero hasta ahora son necesarias.
  2. binary tools zip- . D:\NETMF\repo, repo — , bin tools D:\NETMF.
  3. :
    <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). . .
  4. 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.
  5. .Net Micro Framework Cryptographic Libraries. , . . , , , .

    msi . ( <crypto install folder>), , D:\NETMF\repo D:\NETMF\repo_master.


La distribución es una estructura compleja con una gran cantidad de referencias cruzadas. Combinó todo esto con un proyecto para MSBuild . Los archivos de proyecto se parecen a los archivos sln y proj familiares para Visual Studio, pero en su interior tienen una estructura más compleja. Es por eso que usar Visual Studio para ensamblar fallará.

En los siguientes artículos le contaré más sobre los componentes y las relaciones dentro de la distribución, pero ahora necesita saber que el puerto para STM3F4Discovery está en la carpeta
<repo folder>\Solutions\STM32F4DISCOVERY
y los archivos binarios y hexadecimales recopilados aparecerán en la carpeta
<repo folder>\BuildOutput


Estudio visual


MSBuild es parte de Visual Studio. La documentación para .netmf interpreter 4.4 indica que las ediciones Visual Studio 2015 Community, Pro y Ultimate son compatibles, por lo que debe instalar una de ellas para construir con éxito el puerto.

Compilador ARM


A continuación, necesita un compilador para ARM . Se proporciona trabajo con dos compiladores:


El compilador RealView es parte de la herramienta de desarrollo Keil MDK . La versión gratuita tiene un límite de 32 kb de código, pero el puerto tiene un volumen mayor, por lo que definitivamente necesita una licencia, por ejemplo, una licencia de prueba MDK-Professional de 7 días . Puede leer sobre la instalación de Keil MDK 5 aquí .
Debe instalarse de manera predeterminada en la carpeta C:\Keil_v5.

GCC es gratuito, pero el firmware que genera es un 10% más grande que el generado por el compilador RealView. GCC ARM Embedded se puede descargar como un archivo comprimido y descomprimir en cualquier ubicación. La carpeta con los contenidos desempaquetados del archivo llamaré más <gcc folder>.

Compilación con herramientas de compilación ARM RealView



El kit de distribución ya ha realizado configuraciones de compilación para las versiones MDK 3.1, 3.80a, 4.12, 4.13, 4.54, 5.04, 5.05. Si necesita usar una versión diferente, puede agregar varias líneas al archivo.
<repo folder>\tools\Targets\Microsoft.Spot.system.mdk.targets

Utilicé la versión 5.06. Para hacer esto, después de las líneas.

<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>


Agregue las lineas

<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>


Ahora puedes comenzar a compilar. Debe abrir la línea de comando e ir a la carpeta con el repositorio, por ejemplo así:
cd /d D:\WORKDIR\NetMf\NetMFRepo\repo

luego debe configurar las variables de entorno haciendo:
setenv_mdk 5.06



Luego vaya a la carpeta con el puerto ( <repo folder>\Solutions\STM32F4DISCOVERY). Por ejemplo, así:
cd /d D:\WORKDIR\NetMf\NetMFRepo\repo\Solutions\STM32F4DISCOVERY

Ahora puede comenzar la compilación utilizando, por ejemplo, el siguiente comando:

msbuild dotnetmf.proj /p:flavor=release /fl

where

msbuild- call para iniciar el ensamblado

dotnetmf.proj- proyecto de puerto para STM32F4DISCOVERY

/p:flavor=release- tipo de ensamblaje (debug / release / rtm)

/fl- escriba el registro del ensamblado en un archivo.

el archivo de registro estará en la carpeta actual (en este ejemplo D:\WORKDIR\NetMf\NetMFRepo\repo\Solutions\STM32F4DISCOVERY). Si el registro no es necesario, /flpuede eliminarlo.

Para ver todas las opciones de compilación, debe ejecutarla. La
msbuild /t:help



compilación lleva mucho tiempo y 10 minutos:


El resultado será una gran cantidad de archivos de los que necesitará:
<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


Para una compilación limpia, antes de ejecutar un comando,
msbuild dotnetmf.proj /p:flavor=release /fl
debe ejecutar el comando
msbuild /t:clean
o eliminar la carpeta
<repo folder>\BuildOutput



Compilación con GCC ARM Embedded



El uso de GCC puede requerir otra revisión. En el archivo: debe agregar
<repo folder>\Solutions\STM32F4DISCOVERY\STM32F4DISCOVERY.settings
después de la línea. Esto corrige el error "NNNN.a usa argumentos de registro VFP" . Lee más aquí . Sin embargo, este error puede no ocurrir si utiliza una compilación "limpia". Para una compilación limpia, antes de ejecutar el comando, debe ejecutar el comando o eliminar la carpeta. Entonces, para recopilar el puerto, abra la línea de comando y vaya a la carpeta con el repositorio, por ejemplo, así: entonces necesita establecer variables de entorno haciendo: donde está la versión de gcc es la ruta donde se encuentra GCC ARM Incrustado El comando puede verse así:
<NO_BOOTLOADER_COMPRESSION>true</NO_BOOTLOADER_COMPRESSION>

<PLATFORM_EMULATED_FLOATINGPOINT Condition="'$(COMPILER_TOOL)'=='GCC'">true</PLATFORM_EMULATED_FLOATINGPOINT>




msbuild dotnetmf.proj /p:flavor=release /fl

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



Luego vaya a la carpeta con el puerto ( <repo folder>\Solutions\STM32F4DISCOVERY). Por ejemplo, así: la

cd /d D:\WORKDIR\NetMf\NetMFRepo\repo\Solutions\STM32F4DISCOVERY

compilación se puede iniciar utilizando, por ejemplo, el siguiente comando:

msbuild dotnetmf.proj /p:flavor=release /fl

where
  • msbuild - llame para comenzar el montaje
  • dotnetmf.proj - diseño de puerto para STM32F4DISCOVERY
  • /p:flavor=release - tipo de compilación (depuración / lanzamiento / rtm)
  • /fl - Escribir el registro de ensamblaje en un archivo.


el archivo de registro estará en la carpeta actual (en este ejemplo D:\WORKDIR\NetMf\NetMFRepo\repo\Solutions\STM32F4DISCOVERY). Si el registro no es necesario, /flpuede eliminarlo.

Para ver todas las opciones de compilación, debe hacerlo. La
msbuild /t:help



compilación lleva mucho tiempo y 10 minutos:


el resultado será una gran cantidad de archivos de los que necesitará:
<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


Firmware de la placa



Por lo tanto, hay 3 archivos:
Tinybooter.hex, ER_CONFIG ER_FLASH.

TinybooterEs un gestor de arranque. Se utilizan para el firmware CLR. ER_CONFIGy ER_FLASHeste es el CLR en sí.

Para actualizar el tablero, necesitamos software adicional:
  1. STM32 ST-LINK Utility : un programador para flashear TinyBooter.
  2. MicroFraimworkSDK.MSI y NetMFVS14.vsix instalados : el primero contiene las bibliotecas y utilidades necesarias, el segundo proyectos de plantilla .Net Micro Fraimwork para Visual Studio.
  3. Se requiere un controlador USB para las utilidades de MicroFraimworkSDK para ver la placa (no se requiere para Windows 10).


Para flashear el tablero, haga lo siguiente:

  1. Conecte la placa a la computadora a través del cable miniUSB:


  2. Inicie la utilidad STM32 ST-LINK y seleccione el menú Destino-> Conectar:


    después de conectarse a la placa STM32, la utilidad ST-LINK se verá así:


  3. Target->Erase Sectors...:


    Select All Apply:


    flash :


    STM32 ST-LINK Utility :


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


    tinybooter.hex Start:


    STM32 ST-LINK Utility :


  5. miniUsb Reset

  6. microUSB :


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

  8. .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



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


    Deploy:


    Ping CLR :


    , .


Visual Studio



Ahora puede crear y ejecutar el proyecto en Visual Studio. Hagamos un proyecto simple y parpadeante, con LED parpadeantes.

Iniciamos Visual Studio y creamos un nuevo proyecto:


si la instalación de SDK y vsix se completó correctamente, aparecerá una nueva plantilla de proyecto de Micro Framework. Seleccione la aplicación de consola:


después de crear la solución, puede ir a las propiedades del proyecto:


en la configuración del proyecto en la pestaña .NET Micro Framework, en el campo Transporte, seleccione USB. Después de eso, el nombre de la placa debería aparecer en el campo Dispositivo:


guarde y cierre la configuración.

A continuación, agregue Referencia al ensamblado en:
C:\Program Files (x86)\Microsoft .NET Micro Framework\v4.4\Assemblies\le\Microsoft.SPOT.Hardware.dll



Y el último paso es reemplazar el código program.cscon esto:

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);
            }
        }
    }
}


Comenzamos el proyecto:


y después de unos segundos, los LED de la placa comienzan a parpadear.

Conclusión



.NET Micro Fraimwork es un proyecto bastante complicado. Por el momento, todavía requiere ciertas habilidades y conocimientos, especialmente cuando se trabaja con el repositorio. En este artículo, hablé específicamente lo más detallado posible sobre lo que tiene que lidiar al compilar puertos, ya que esta información será útil al desarrollar soluciones para sus propias placas.
Sin embargo, ejecutar .NET Micro Fraimwork en STM32F4Discovery puede ser más simple y más rápido al tomar archivos Tinybooter.hex, ER_CONFIG y ER_FLASH listos para usar. Puedes descargarlos aquí .

Source: https://habr.com/ru/post/es387333/


All Articles