Executando .Net Micro Framework 4.4 no STM32F4Discovery


O .Net Micro Framework é uma tecnologia que permite escrever aplicativos para microcontroladores usando todo o poder do código gerenciado e do Visual Studio. Ela existe há muito tempo e agora está passando por um renascimento. Um projeto de código aberto foi formado em torno dele, que foi movido recentemente para o GitHub. No entanto, este ainda não é um produto "in a box". Trabalhar com o .Net Micro Framework requer certas habilidades. A última vez que escrevi sobre como criar e executar um aplicativo simples "Hello world" no emulador para Windows. Agora, falaremos sobre como trabalhar com o .Net Micro Framework no hardware real - placa de depuração STM32F4Discovery.

A taxa é bastante comum e pode ser adquirida, por exemplo, aqui . A partir da versão 4.4, a porta para esta placa está incluída na distribuição do netmf-interpreter. Anteriormente, ele existia como um projeto separado .

Na Internet e , em particular, no hub, é possível encontrar materiais sobre o lançamento do .Net Micro Framework nesta placa, mas primeiramente eles falam sobre a versão 4.3 e, em segundo lugar, eles já usam o conjunto finalizado. Falarei sobre como compilar e executar o STM32F4Discovery .Net Micro Framework versão 4.4 em detalhes. O artigo será longo, pois será necessário corrigir vários erros no kit de distribuição, baixar e instalar vários utilitários e drivers.

Preparação da compilação



Distribuição


Primeiro de tudo, você precisa ter a distribuição em si.

O repositório está aqui . Você pode baixá-lo como um arquivo zip ou obtê-lo usando o git. Instruções em inglês sobre como obter o repositório e coletar arquivos de instalação podem ser encontradas aqui . Com base nessas instruções, um artigo foi escrito. As versões do repositório associadas a releases específicos podem ser baixadas dos arquivos zip aqui .

Para obter o repositório usando o git, faça o seguinte:
  1. Crie uma cópia pública em sua conta nos servidores GitHub por bifurcação . Todas as solicitações de recebimento devem vir do repositório público do 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 : Os requisitos para o caminho local (deve haver pelo menos uma pasta pai - consulte a seção 2 de trabalho com o git) também são relevantes ao descompactar o repositório do arquivo morto.

Infelizmente, a versão do RTW (.NET Micro Framework v4.4 Release To Web) contém erros que não permitem coletar imediatamente os arquivos de instalação do repositório. No entanto, esses erros podem ser corrigidos e, depois, vou lhe dizer como fazê-lo.
Após o repositório ter sido copiado para uma pasta local de uma maneira ou de outra, você precisa fazer o seguinte:

  1. Faça o download do arquivo zip de ferramentas binárias . Este arquivo contém os utilitários necessários para criar arquivos de instalação e "portas" para dispositivos. No futuro, está planejado abandonar esses utilitários, mas até agora eles são necessários.
  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.


A distribuição é uma estrutura complexa com um grande número de referências cruzadas. Combinou tudo isso com um projeto para o MSBuild . Os arquivos de projeto se parecem com os arquivos sln e proj familiares do Visual Studio, mas por dentro têm uma estrutura mais complexa. É por isso que o uso do Visual Studio para montagem falhará.

Vou falar mais sobre os componentes e os relacionamentos na distribuição nos artigos a seguir, mas agora você precisa saber que a porta para STM3F4Discovery está na pasta
<repo folder>\Solutions\STM32F4DISCOVERY
e os arquivos binários e hexadecimais coletados aparecerão na pasta
<repo folder>\BuildOutput


Estúdio visual


MSBuild faz parte do Visual Studio. A documentação do interpretador .netmf 4.4 afirma que as edições Visual Studio 2015 Community, Pro e Ultimate são suportadas; portanto, é necessário instalar um deles para criar a porta com êxito.

Compilador ARM


Em seguida, você precisa de um compilador para o ARM . O trabalho com dois compiladores é fornecido:


O compilador RealView faz parte da ferramenta de desenvolvimento Keil MDK . A versão gratuita possui um limite de 32 kb de código, mas a porta possui um volume maior, portanto, você definitivamente precisa de uma licença, por exemplo, Licença de Teste MDK-Professional de 7 dias . Você pode ler sobre a instalação do Keil MDK 5 aqui .
Ele deve ser instalado por padrão na pasta C:\Keil_v5.

O GCC é gratuito, mas o firmware gerado é 10% maior que o gerado pelo compilador RealView. O GCC ARM Embedded pode ser baixado como um arquivo morto e descompactado em qualquer local. A pasta com o conteúdo descompactado do arquivo chamarei mais adiante <gcc folder>.

Compilando com as ferramentas de compilação do ARM RealView



O kit de distribuição já fez configurações de compilação para as versões MDK 3.1, 3.80a, 4.12, 4.13, 4.54, 5.04, 5.05. Se você precisar usar uma versão diferente, poderá adicionar várias linhas ao arquivo.Eu
<repo folder>\tools\Targets\Microsoft.Spot.system.mdk.targets

usei a versão 5.06. Para fazer isso, após as linhas

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


Eu adicionei as linhas

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


Agora você pode começar a compilar. Você precisa abrir a linha de comando e ir para a pasta com o repositório, por exemplo, como este:
cd /d D:\WORKDIR\NetMf\NetMFRepo\repo

então você precisa definir as variáveis ​​de ambiente fazendo:
setenv_mdk 5.06



Em seguida, vá para a pasta com a porta ( <repo folder>\Solutions\STM32F4DISCOVERY). Por exemplo, desta forma:
cd /d D:\WORKDIR\NetMf\NetMFRepo\repo\Solutions\STM32F4DISCOVERY

Agora você pode iniciar a compilação usando, por exemplo, o seguinte comando:

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

where

msbuild- call para iniciar o assembly

dotnetmf.proj- projeto de porta para STM32F4DISCOVERY

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

/fl- grave o log de montagem no arquivo.

o arquivo de log estará na pasta atual (no exemplo isto D:\WORKDIR\NetMf\NetMFRepo\repo\Solutions\STM32F4DISCOVERY). Se o log não for necessário, /flvocê poderá removê-lo.

Para ver todas as opções de compilação, você precisa executar. A
msbuild /t:help



compilação leva muito tempo e leva 10 minutos:


O resultado serão muitos arquivos dos quais você precisará:
<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 uma construção limpa, antes de executar um comando,
msbuild dotnetmf.proj /p:flavor=release /fl
você precisa executar o comando
msbuild /t:clean
ou excluir a pasta
<repo folder>\BuildOutput



Compilando com o GCC ARM incorporado



O uso do GCC pode exigir outra revisão. No arquivo: você precisa adicionar
<repo folder>\Solutions\STM32F4DISCOVERY\STM32F4DISCOVERY.settings
após a linha, o que corrige o erro "NNNN.a usa argumentos de registro VFP" . Leia mais aqui . No entanto, esse erro pode não ocorrer se você usar uma compilação "limpa". Para uma compilação limpa, antes de executar o comando, você precisa executar o comando ou excluir a pasta. Assim, para recolher a porta, abrir a linha de comando e vá para a pasta com o repositório, por exemplo como este: em seguida, você precisa definir as variáveis de ambiente fazendo: qual é a versão gcc é o caminho onde GCC ARM Incorporado O comando pode ficar assim:
<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



Em seguida, vá para a pasta com a porta ( <repo folder>\Solutions\STM32F4DISCOVERY). Por exemplo, assim: A

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

compilação pode ser iniciada usando, por exemplo, o seguinte comando:

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

where
  • msbuild - ligue para iniciar a montagem
  • dotnetmf.proj - design de porta para STM32F4DISCOVERY
  • /p:flavor=release - tipo de compilação (depuração / release / rtm)
  • /fl - escreva o log de montagem em um arquivo.


o arquivo de log estará na pasta atual (no exemplo isto D:\WORKDIR\NetMf\NetMFRepo\repo\Solutions\STM32F4DISCOVERY). Se o log não for necessário, /flvocê poderá removê-lo.

Para ver todas as opções de compilação, é necessário fazê-
msbuild /t:help



lo.A compilação leva muito tempo e leva 10 minutos:


O resultado serão muitos arquivos dos quais você precisará:
<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 da placa



Assim, existem 3 arquivos:
Tinybooter.hex, ER_CONFIG ER_FLASH.

TinybooterÉ um carregador de inicialização. Eles são usados ​​para o firmware CLR. ER_CONFIGe ER_FLASHeste é o próprio CLR.

Para exibir a placa, precisamos de software adicional:
  1. STM32 ST-LINK Utility - um programador para atualizar o TinyBooter.
  2. Instalada MicroFraimworkSDK.MSI e NetMFVS14.vsix - a primeira contém as bibliotecas necessárias e utilitários, o segundo - projectos modelo .Net Micro Fraimwork para o Visual Studio.
  3. Driver USB necessário para que os utilitários do MicroFraimworkSDK vejam a placa (não é necessário para o Windows 10).


Para piscar o quadro, faça o seguinte:

  1. Conecte a placa ao computador via fio miniUSB:


  2. Inicie o STM32 ST-LINK Utility e selecione o menu Target-> Connect:


    Após conectar-se à placa STM32, o ST-LINK Utility terá a seguinte aparência:


  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



Agora você pode criar e executar o projeto no Visual Studio. Vamos fazer um projeto simples e intermitente, com LEDs piscando.

Iniciamos o Visual Studio e criamos um novo projeto:


Se a instalação do SDK e do vsix for concluída corretamente, um novo modelo de projeto do Micro Framework será exibido. Selecione Aplicativo de console:


Após criar a solução, você pode acessar as propriedades do projeto:


Nas configurações do projeto na guia .NET Micro Framework, no campo Transporte, selecione USB. Depois disso, o nome do quadro deve aparecer no campo Dispositivo:


Salve e feche as configurações.

Em seguida, adicione Refrence ao assembly em:
C:\Program Files (x86)\Microsoft .NET Micro Framework\v4.4\Assemblies\le\Microsoft.SPOT.Hardware.dll



E a última etapa é substituir o código program.cspor:

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


Iniciamos o projeto:


e após alguns segundos, os LEDs no painel começam a piscar.

Conclusão



O .NET Micro Fraimwork é um projeto bastante complicado. No momento, ele ainda requer certas habilidades e conhecimentos, especialmente ao trabalhar com o repositório. Neste artigo, falei especificamente o mais detalhado possível sobre o que você deve lidar ao compilar portas, pois essas informações serão úteis ao desenvolver soluções para suas próprias placas.
No entanto, a execução do .NET Micro Fraimwork no STM32F4Discovery pode ser mais simples e rápida, usando os arquivos Tinybooter.hex, ER_CONFIG e ER_FLASH prontos. Você pode baixá-los aqui .

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


All Articles