Movendo-se com Mecrisp-Stellaris e Embello

no último episódio, defendi um pouco para os microcontroladores sendo uma plataforma de desenvolvimento imóvel, não apenas para a indústria, onde normalmente é visto nos dias de hoje, mas também para hackers . Eu talvez até te enganei para pegar um casal de hardware barato. Desta vez, vamos obter o sistema adiante configurado nesse hardware e executar o “Hello World” obrigatório e LED Blinky. Mas então também vamos dar um mergulho em um dos recursos que apresentam muito limpo em microcontroladores: multitarefa fácil.

Trabalhar!

Hardware.

Mecrisp-Stellaris Forra em um grande número de microcontroladores de braço, mas eu vou me concentrar aqui nos chips STM32F103 que estão disponíveis para excepcionalmente pouco dinheiro na forma de uma cópia genérica do Miniple Mini, muitas vezes chamado de “STM32F103 Sistema Mínimo. “Ou” pílula azul “por causa do fator de forma, e o fato de que costumava ser vermelho à venda. O microcontrolador a bordo pode ser executado a 72 MHz, tem 20 kb de RAM e 64 ou 128 KB de flash. Tem muitos pinos, os únicos digitais são 5 V tolerante, e tem todos os periféricos normais do microcontrolador. Não é o mais eficiente, e não tem uma unidade de ponto flutuante ou um DAC, mas é um design antigo robusto que está disponível por muito menos dinheiro do que deve ser.

Programador conectado, power sobre USB
Maravilhas semelhantes de trabalho de produção em massa para o programador que você precisará inicialmente piscar o chip. Qualquer um dos clones do ST-LINK V2 funcionará muito bem. (Ironicamente, o hardware dentro do programador é quase idêntico ao alvo.) Finalmente, considerando que as corridas como em concha interativa, você precisará de uma conexão serial com a placa STM32. Que provavelmente indica um adaptador USB / serial.

Toda essa configuração não vai custar muito mais do que uma refeição de fast food, e o programador e o adaptador USB / serial são coisas que você vai querer ter em seu kit de qualquer maneira, se você ainda não.

Você pode alimentar a placa diretamente através dos vários pinos 3.3 e GND espalhados ao redor da placa, ou através da porta micro USB ou os pinos 5V na placa de destino. As duas últimas opções passam por um regulador de 3,3 V antes de se juntar com os pinos 3.3. Todos os pinos estão interconectados, por isso é melhor se você usa apenas uma fonte de alimentação de cada vez.

Firmware: o sistema adiante

Vá pegar o pacote Super-especial do Hackaday-Edition Mecrisp Forth do GitHub. Incluído no diretório “Roms” é um sistema adiante que funcionará para as demos aqui. Eu carreguei em uma base respeitável de [JCW] Excepcional Embello bibliotecas também, fornecendo coisas como facilmente configuração GPIO, funções de atraso e assim por diante. Há muito mais bibliotecas disponíveis e analisaremos as próximas vezes quando precisarmos deles.

A coisa mais legal sobre o uso de um sistema é que muito pouco software de suporte é necessário de qualquer maneira – o intérprete da frente compila seu próprio código, e você interage com ele sobre o terminal serial. Tudo acontece dentro do microcontrolador. O único obstáculo, então, é sair no chip. Nos velhos tempos, isso costumava ser feito, alternando os bytes manualmente, e para frente é realmente pequeno o suficiente que literalmente bootstrapping desta forma é possível. Mas você já recebeu esse programador de chips, certo?

[Texane] As utilidades do ST são a maneira mais fácil de sair no seu chip. Baixe-os do GitHub e construa-se ou tente sua sorte com o gerenciador de pacotes do seu distro. (Pessoas do Windows, você não deixou de fora também. Embora esse binário não tenha visto atualizações há algum tempo, ele fará.)

Conecte os fios de programação na figura evidente e emita os comandos mágicos ST-Flash Erase e St-flash Escreva Mecrisp-Stellaris-HackAday-Edition.bin 0x8000000. Em cinco segundos, você estará pronto para rumble.

GND – GND.

SCCLK – CLK.

Swsio – Dio.

Ter que obter um programador é um aborrecimento se você não tiver um, mas fará o resto da sua vida mais fácil, e conseguir um é tão básico quanto clicar em “pagar” e esperar. Nosso próprio [Al Williams] (sem relação) tem uma postagem recente em usar o mesmo software para depurar c ou código arduino com o GDB, por isso vale a pena o seu tempo para configurar isso.

Programas

Conecte serial, alimentado por laptop
Coloque o programador para agora e conecte-se ao STM32 sobre serial; A taxa de transmissão padrão deve ser 115.200. Se você ainda não desativou o poder, talvez seja necessário acertar o botão Redefinir na placa STM32. Se tudo corresse bem, você será recebido por um crânio familiar e cross-wrenches. Mecrisp está esperando um linefeed no final das linhas, então se você está enviando lf + cr, você terá sucesso com sucesso o retorno duas vezes.

A9 TX – serial rx

A10 RX – Serial TX

GND – GND.

[JCW] ‘S Folie é um bom e multi-plataforma serial terminal emulador para esta aplicação. O que ele faz que seu programa terminal normal não permite que você digite novamente uma linha de comando com a seta para cima, o que torna o cuidado de erros muito mais fáceis do que re-digitar um longo comando. Isso tambémInclui automaticamente outros arquivos, que cometi uso substancial de construir o binário para este artigo. Você não precisa correr folie, mas aposto que você vai gostar.

Olá Mundo

Agora é o tempo “Hello World”. Se você é novo para frente, vem aqui uma introdução muito seletiva. Tipo 2 2 + e pressione Enter. Diz OK .. Isso é reconfortante, certo? Agora digite. (Leia “DOT”) e imprimirá o resultado não surpreendente. O ponto é o primeiro de algumas títias globais que você vai querer internalizar. Muitos comandos com um ponto imprimem seus resultados imediatamente. .S (DOT-ESS) imprime o conteúdo da pilha, por exemplo. Dois muito mais idiomas que veremos muitos são @ para obter uma variável ou ler uma entrada e! para definir uma variável ou saída. Leia estes como “get” e “set” na sua cabeça ao digitalizar o código.

Em seguida, vamos ver como escrever uma função. : Inicia uma definição de função e; termina isso. Então: quatro 2 2 +; Define uma função que adiciona dois e dois juntos. (E compila em tempo real!) Você pode então virar e ligar para esta função imediatamente. Quatro .s mostrarão que nossa função deixou a soma de dois e dois na pilha. Nesse sentido, as funções em frente não são realmente funções. Eles não tomam argumentos explícitos ou retornam valores explícitos. Eles apenas operam em quaisquer dados estarem na pilha e deixam os resultados lá também. É por isso que as funções são chamadas de “palavras”. Eu estarei aderindo a esta convenção a partir de agora.

Aqui, finalmente, é “Olá mundo” :: HW. “Olá, mundo!” Cr; “As cordas são um pouco estranhas em frente, principalmente por causa da maneira como a linguagem é analisada – o compilador lê até um espaço e depois executa o que encontrou, então tem que haver um espaço entre a string de impressão comando (. “) E o primeiro caractere que você deseja imprimir. O comando de impressão digitaliza até encontrar um fechamento “, por isso você não precisa de um espaço extra lá. CR envia um retorno de carruagem. Digite HW no prompt. Olá!

LEDs piscando

Embora a entrada e saída de texto serial seja tão fácil em frente, piscando um LED é o padrão “Hello World” de microcontroladores, então é hora de algum GPIO. Como o sistema já está configurado para esta placa de microcontroladora específica, girar um LED é tão fácil quanto digitar led.on no prompt. Quer desligá-lo? led.off. Piscando manual vai envelhecer muito rapidamente, por isso, vamos escrever uma palavra piscada. : Blink Led.on 100 ms led.off 200 ms; vai fazer o truque. Tente piscar piscar piscar. Veja meu código de demonstração piscar para a elaboração. (Mais na MS em alguns milhares de milissegundos.)

Os detalhes da inicialização do GPIO estão escondidos no núcleo / hackaday / led.fs e no stm32f1 / io.fs de Embello, respectivamente. Devolando, você verá o procedimento de inicialização padrão: o PIN específico é definido como saída, lançando alguns bits nos registros de controle periférico do STM32. [JCW] definiu um monte destes, tornando a definição de um pino como saída, com o driver push-pull, tão fácil quanto o modo PC13 Omode-PP IO!. (Lembre-se que o “!” Indica definir o valor em uma variável ou registro.)

Para configurar o PIN PA7 para entrada ADC: PA7 IMODE-ADC IO-Mode!. Testando botões, usando os resistores de pullup ou pulldown embutidos: Pa3 Imode-Pull Io-Mode! e, em seguida, defina a saída para puxar para cima ou para baixo usando o TRUE PA3 IO! ou PA3 iOS!. Você será capaz de ler o estado do botão com PA3 IO @ (“io get”) mais tarde.

O GPIO nos chips STM32 é muito flexível, e se você quiser obter fundo nas opções de configuração na folha de dados, você pode definir tudo isso com facilidade usando o código IO.fs [JCW]. Por exemplo, IO.All imprime todos os registros do GPIO e seus valores, que é uma ótima ajuda para depuração interativa. Dito isto, há algum espaço aqui para muito mais camada de abstração de hardware mais fácil de usar, se você quiser contribuir um.

Multitarefa no rápido

Então, agora temos um LED piscando e a impressão serial-porto “Olá mundo”. Não é um mau começo, e ambos fazem bom uso da interatividade: o LED apenas acende quando você digita piscam. Uma das principais virtudes de Adiante, para mim, é a facilidade de ir entre testes interativos de palavras como esta, e depois implantando a funcionalidade em um sistema de trabalho. Uma razão é que quase todos os aderentes suportam multitarefa cooperativa básica. Aqui está o que quero dizer.

Primeiro, vamos limitar nossa função de piscar para que não tenhamos que digitar muito. : BB começa a piscar novamente; Cria uma função, BB para “mau piscar”, que vai correr para sempre. O problema com “correr para sempre” é que você nunca retorna à linha de comando do intérprete sem pressionar fisicamente o botão de reset e, em seguida, tudo que você estava trabalhando na RAM é perdido.

Em vez disso, vamos piscar em um loop com uma saída. : gb begin blink key? até ; creates a function that will run our blink command until there’s some input from the keyboard — the return crucial is pressed. This particular looping construct is very beneficial for testing out functions that you’d like to run continuously, without hanging the system. keep it in Mente.

Uma vez que tocamos nossa função de piscar de correr do jeito que queremos, vamos criar uma tarefa de fundo para que ela possa piscar desacompanhada.

Tarefa: BlinkTask.
: piscar&
BlinkTask Ative.
começar a piscar novamente
;
multitarefa
piscar&

Resumidamente, a tarefa: Word cria algum espaço de memória para a nossa tarefa de fundo piscando que estamos chamando BlinkTask. A função pisca e faz o trabalho em segundo plano. Piscar e inicia declarando que ele usará o contexto da tarefa BlinkTask e que ele deve começar a correr. Então entra em um loop sem limites de que nunca sai. A multitarefa transforma multitarefa e pisca e executa nossa tarefa. Execute-o, e o LED pisca enquanto ainda pode interagir com o console. Doce. Digite tarefas e você verá que há dois ativos: um é o nosso blinker e o outro é o intérprete interativo.

Mas como a tarefa de blink sabe quando ceder a outros processos simultâneos? Para adiante, a palavra pausa rende do contexto atual e se move para a próxima multitarefa redonda de Robin. A função MS, entre outros, consiste em um comando de pausa, então o que parece que um atraso de bloqueio em uma configuração de tarefas simples acaba jogando fantasticamente bem com suas outras tarefas.

A grande coisa sobre a multitarefa cooperativa é que você controla exatamente quando haverá um interruptor de contexto, o que pode ajudar a eliminar as falhas que você encontrará em sistemas preventivos. A desvantagem é que você é responsável por lembrar de pausar suas funções de vez em quando, e você tem que verificar o tempo de si mesmo. Claro, este é um microcontrolador, e você tem o controlador interno interno bastante rico de braço para jogar também.

O ponto real de multitarefa em Micros em frente é que ele faz um ótimo fluxo de trabalho para escrever, testar e implantar pequenos daemons: funções que querem ser “sempre ativadas”. Primeiro, escreva a função que faz a ação uma vez. Segundo, teste-o em um loop com uma escotilha de escape. Terceiro, uma vez que esteja funcionando, remova a fuga e faça uma tarefa de fundo para isso. Você pode ligar e desligar usando inativo e acordar, mesmo de dentro de outras tarefas. Veja a multitarefa de Mecrisp.txt, a fonte, para muito mais detalhes.

Qual é o próximo?

Até agora, criamos Mecrisp-Stellaris, com bibliotecas adicionais do Embello de Jeelabs, e execute algumas demonstrações rápidas. Se isso estimulou seu interesse, vou levá-lo a um passo a passo de construir algum software real da próxima vez. Há muito mais para dizer sobre a maneira como Mecrisp lida com as nuances do flash versus RAM, insumos e saídas, e a prática do desenvolvimento interativo. Alguns dos aspectos realmente esquisitos de trabalhar em frente aumentarão suas cabeças engraçadas e aprenderemos a amá-los de qualquer maneira.

Enquanto isso, pegue suas placas baratas de STM32F103 piscadas com o nosso binário, e ficam um pouco acostumados a brincar no ambiente no chip. Piscar alguns LEDs. Olhe ao redor do glossário de Mecrisp-Stellaris e da documentação da API do Embello. Ou apenas digite lista para ver todo o comando à sua disposição e começar a invadir.

Leave a Reply

Your email address will not be published. Required fields are marked *

Extra Text
Cape Town, South Africa