Spostando con MECRISP-Stellaris e Embello

Nell’ultimo episodio, ho sostenuto un po ‘per i microcontrollori essendo una piattaforma di sviluppo immobile ancora valida, non solo per l’industria in cui è normalmente visto in questi giorni, ma anche per gli hacker . Forse anche ti ha tolto di ottenere un paio di pezzi di hardware economico. Questa volta in giro, avremo il possibile sistema installato su quell’hardware e gestiremo il “mondo di Hello” obbligatorio e ha condotto Blinky. Ma poi faremo anche un tuffo in una delle caratteristiche che producono molto pulito su microcontrollori: facile multitasking.

Lavorare!

Hardware

MecRisp-Stellariste Forth corre su un gran numero di microcontrollori del braccio, ma mi concentrerò qui sui chip STM32F103 disponibili per eccezionalmente pochi soldi sotto forma di una copia generica della MINI GENERICA, spesso chiamata “STM32F103 “O” pillola blu “a causa del fattore di forma, e il fatto che ci fosse rossa in vendita. Il microcontrollore a bordo può funzionare a 72 MHz, ha 20 KB di RAM e 64 o 128 KB di flash. Ha un sacco di spilli, i soli digitali sono tolleranti a 5 V, e ha tutte le normali periferiche del microcontrollore. Non è il più efficiente dal punto di vista energetico, e non ha un’unità a punta galleggiante o un DAC, ma è un vero design robusto disponibile per molto meno denaro di quanto non sia.

Programmatore connesso, potenza su USB
Simili meraviglie di lavori di produzione di massa per il programmatore che dovrai inizialmente lampeggiare il chip. Uno dei cloni del St-Link V2 funzionerà bene. (Ironiaforme, l’hardware all’interno del programmatore è quasi identico al bersaglio.) Infine, considerando che al contrario viene eseguito come in guscio interattivo, avrai bisogno di una connessione seriale con la scheda STM32. Ciò probabilmente indica un adattatore USB / seriale.

Tutta questa configurazione non costerà molto più di un pasto fast food, e il programmatore e l’adattatore USB / seriale sono cose che vorresti avere nel tuo kit comunque, se non lo fai già.

È possibile alimentare la scheda direttamente attraverso i vari perni 3.3 e GND sparsi attorno alla tavola, o attraverso la porta micro USB o i perni da 5 V sulla scheda di destinazione. Queste ultime due opzioni passano attraverso un regolatore da 3,3 V prima di unirsi ai 3.3 pin. Tutti i pin sono interconnessi, quindi è meglio se usi solo un alimentatore alla volta.

Firmware: il Forth System

Vai a prendere il pacchetto Mrecisp Forth Super-Special Hackaday-Edition da GitHub. Incluso nella directory “Rom” è un sistema avanzato che funzionerà per le demo qui. Ho caricato in una base rispettabile da [JCW] Eccezionale embello embello delle biblioteche, fornendo cose come una facile configurazione GPIO, le funzioni di ritardo e così via. Ci sono molte più biblioteche disponibili e ci vedremo la prossima volta quando ne abbiamo bisogno.

La cosa più bella di usare un sistema avanzato è che è necessario un piccolo software di supporto in qualsiasi modo – il Forth Interpreter compila il proprio codice e interagile con esso sul terminale seriale. Tutto accade all’interno del microcontrollore. L’unico ostacolo, quindi, sta andando al chip. Nei vecchi tempi, questo usato per essere fatto attivando nei byte manualmente, e fuori è in realtà abbastanza piccolo che letteralmente lo stivali è possibile in questo modo. Ma hai già ricevuto quel programmatore di chip, giusto?

[Texane] Le utenze ST sono il modo più semplice per scoprire il tuo chip. Scaricali da GitHub e lo costruisci da solo o prova la fortuna con il gestore dei pacchetti del tuo Distro. (Poliche di Windows, non sei stato lasciato neanche. Sebbene il binario non abbia visto aggiornamenti da un po ‘, lo farà.)

Collegare i fili di programmazione nella moda evidente e rilasciano i comandi magici Cancellazione St-Flash e St-Flash Scrivi MECRISP-STELLARIS-Hackaday-Edition.bin 0x8000000. In cinque secondi, sarai pronto a rommare.

GND – GND.

Swclk – clk.

SWSIUO – DIO.

Dover prendere un programmatore è una seccatura se non ne hai uno, ma renderà il resto della tua vita più facile, e ottenere uno è fondamentale come cliccando da “pagare” e in attesa. La nostra [Al Williams] (nessuna relazione) ha un recente post sull’utilizzo dello stesso software per il debug del codice C o Arduino con GDB, quindi vale il tuo tempo per impostarlo.

Software

Collegamento seriale, alimentato dal laptop
Metti via il programmatore per ora e connettiti allo STM32 su SERIAL; La velocità di trasmissione predefinita deve essere di 115.200. Se non hai ancora una potenza scollegata, potrebbe essere necessario premettere il pulsante di reset sulla scheda STM32. Se tutto è andato bene, sarai accolto da un familiare cranio-e-cross-cross-crosses. MECRIPS è in attesa di un linfeeed alla fine delle righe, quindi se stai inviando LF + CR, colpisci con successo il ritorno due volte.

A9 TX – Seriale RX

A10 RX – Seriale TX

GND – GND.

[JCW] Solie è un bel emulatore terminale seriale multipiattaforma per questa applicazione. Che cosa significa che il tuo normale programma terminale non ti consente di reinserire una riga di comando con la freccia superiore, il che rende cura di errori di errori molto, molto più facile che re-digitando un lungo comando. InoltreInclude automaticamente altri file, che ho effettuato un uso sostanziale di costruire il binario per questo articolo. Non è necessario eseguire Folie, ma scommetto che ti piacerà.

Ciao mondo

Ora è il momento “ciao mondo”. Se sei nuovo da allora, qui arriva un’introduzione molto selettiva. Digitare 2 2 + e premi Invio. Dice Ok .. questo è rassicurante, giusto? Ora digita. (Leggi “Dot”) e stamperà il risultato non sorprendente. Dot è la prima di alcune poche rate globali che vorresti internalizzare. Un sacco di comandi con un punto di stampa subito i loro risultati. .s (Dot-ESS) stampa i contenuti della pila, ad esempio. Due molto più idiomi che vedremo molti sono @ per ottenere una variabile o leggere un input e! per impostare una variabile o un’uscita. Leggili come “Get” e “Imposta” nella tua testa durante la scansione del codice.

Quindi, vediamo come scrivere una funzione. : avvia una definizione di funzione e; finisce. Quindi: quattro 2 2 +; Definisce una funzione che aggiunge due e due insieme. (E lo compila in tempo reale!) Puoi quindi girare e chiamare questa funzione immediatamente. Quattro. Ti mostrerà che la nostra funzione ha lasciato la somma di due e due sulla pila. In questo senso, le funzioni in avanti non sono davvero funzioni. Non prendono argomenti espliciti o restituiscono valori espliciti. Operano solo su qualsiasi dato che sia in pila, e lascia i risultati anche lì. Ecco perché forth Funzioni sono chiamate “parole”. Avrò adesso a questa convenzione da ora in poi.

Qui, infine, è “Hello World” :: HW. “Ciao, mondo!” CR; “Le stringhe sono un po ‘strane in avanti, principalmente a causa del modo in cui la lingua è analizzata – il compilatore legge fino a uno spazio e quindi esegue ciò che ha trovato, quindi deve esserci uno spazio tra la stampa-A-string Comando (. “) E il primo carattere che si desidera stampare. Il comando di stampa esegue la scansione in avanti finché non trova una chiusura “, però, quindi non hai bisogno di uno spazio aggiuntivo lì. CR invia un ritorno di carrello. Digita HW al prompt. Ciao, mondo!

LED lampeggianti

Anche se l’input e l’output del testo seriale sono così facili da fuori, lampeggia un LED è il “mondo helo” standard dei microcontrollori, quindi è tempo per alcuni GPIO. Poiché il sistema è già configurato per questa particolare scheda del microcontrollore, la rotazione di un LED è facile come digitando il led.on al prompt. Vuoi spegnerlo? Led.off. Il manuale lampeggiante diventerà vecchio piuttosto velocemente, però, quindi scriviamo una parola lampeggiante. : Blink LED.ON 100 ms LED.OFF 200 ms; farà il trucco. Prova Blink Blink Blink. Guarda il mio codice Demo Blink per l’elaborazione. (Altro su SM in poche migliaia di millisecondi.)

I dettagli dell’inizializzazione GPIO sono nascosti in Core / Hackaday / LED.fs e in Embello rispettivamente STM32F1 / IO.fs. Scavando, vedrai la procedura di inizializzazione standard: il particolare PIN è impostato come output lanciando alcuni bit nei registri di controllo periferici di STM32. [JCW] ha definito un gruppo di questi, rendendo l’impostazione di un PIN come output, con il driver push-pull, facile come PC13 Omode-PP-Modalità IO!. (Ricorda il “!” Indica impostare il valore in una variabile o registrati.)

Per configurare PIN PA7 per l’ingresso ADC: PA7 Imode-ADC IO-Mode!. Pulsanti di test, utilizzando i resistori di pullp o pulldown incorporati: PA3 Imode-pull IO-mode! e quindi impostare l’uscita per tirare su o verso il basso usando True PA3 IO! o PA3 iOS!. Sarai quindi in grado di leggere lo stato del pulsante con PA3 IO @ (“Io Get”) in seguito.

GPIO sui chip STM32 è molto flessibile e, se si desidera diventare profonda nelle opzioni di configurazione nella scheda tecnica, è possibile impostare tutto ciò che è facilmente utilizzando il codice IO.FS [JCW]. Ad esempio, Io.Tutta tutti i registri GPIO e i loro valori, che è un grande aiuto per il debug interattivo. Detto questo, c’è qualche stanza qui per un livello di astrazione hardware molto più facile da usare, se vuoi contribuire a uno.

Multitasking sul rapido

Quindi ora abbiamo un LED lampeggiante e la stampa del porto seriale “Hello World”. Non è un brutto inizio, ed entrambi fanno un buon uso dell’interattività della voce: il LED si illumina solo quando digiti lampeggia. Una delle principali virtù di Forth, per me, è la facilità di andare tra test interattivi di parole come questa, e quindi distribuire la funzionalità in un sistema di lavoro. Una ragione è che quasi tutte le avanti supportano il multitasking cooperativo di base. Ecco cosa intendo.

Innanzitutto, loopiamo la nostra funzione lampeggiante in modo che non dobbiamo digitare così tanto. : BB inizia di nuovo lampetta; Crea una funzione, BB per “Bad Blink”, che funzionerà per sempre. Il problema con “Esegui per sempre” in avanti è che non si ritorna mai alla riga di comando dell’interprete senza premere fisicamente il pulsante di reset, e quindi tutto ciò che stavi lavorando in RAM è perso.

Invece, batteriamoci in un anello con una via d’uscita. : gb begin blink key? fino a quando ; 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.

Una volta che abbiamo modificato la nostra funzione lampeggiante per eseguire il modo in cui lo vogliamo, creiamo un compito di sfondo in modo che possa lampeggiare incustodito.

Compito: BlinkTask.
: battito di ciglia&
BlinkTask attiva.
Inizia di nuovo lampeggia
;
multitask.
battito di ciglia&

Brevemente, il compito: Word crea uno spazio di memoria per il nostro compito di sfondo lampeggiante che stiamo chiamando BlinkTask. La funzione lampeggia e funziona in background. Blink & inizia a dichiarare che utilizzerà il contesto dell’attività BlinkTask e che deve iniziare a funzionare. Quindi va in un loop lampeggiante illimitato da cui non lascia mai. Multitask Attiva il multitasking acceso e lampeggia e esegue il nostro compito. Eseguilo e il LED lampeggia mentre puoi ancora interagire con la console. Dolce. Tipo Attività e vedrai che ci sono due attivi: uno è il nostro blinker e l’altro è l’interprete interattivo.

Ma in che modo il compito del battito lampeggia conosce quando cedere ad altri processi simultanei? In Forth, la parola pausa i rendimenti dal contesto corrente e si muove al successivo multitasking round-robin. La funzione MS, tra gli altri, è composta da un comando di pausa, quindi ciò che sembra un ritardo di blocco in un’installazione di singola attività finisce per riprodurre fantasticamente bene con le altre attività.

La cosa grande del multitasking cooperativa è che tu controlli esattamente quando sarà un interruttore di contesto, che può aiutare a eliminare gli stupoli che troverai in sistemi preventivi. Il lato negativo è che sei responsabile del ricordare di mettere in pausa le tue funzioni ora e poi, e devi verificare te stesso. Naturalmente, questo è un microcontrollore, e hai anche il regolatore di interrupt interno del braccio per giocare.

Il vero punto di multitasking su MICROSS in avanti è che fa un flusso di lavoro fantastico per scrivere, testare e distribuire piccoli demoni: funzioni che vogliono essere “sempre su”. Innanzitutto, scrivi la funzione che fa l’azione una volta. Secondo, testarlo in un ciclo con un portello di fuga. In terzo luogo, una volta che funziona, rimuovi la fuga e crea un compito di sfondo per questo. Puoi quindi accenderlo e spegnerlo usando inattivo e sveglia, anche da altri compiti. Vedi Multitask.txt di MECRISP, la fonte, per molti maggiori dettagli.

Qual è il prossimo?

Finora, abbiamo impostato MECRISP-Stellaris, con ulteriori biblioteche dal framework Embello embello e gestire alcune demos veloci. Se questo ha toccato il tuo interesse, ti porterò su una procedura dettagliata di costruire qualche software reale la prossima volta. C’è molto più molto di più da dire sul modo in cui Metcisp gestisce le sfumature del flash contro RAM, input e uscite e la pratica dello sviluppo interattivo. Alcuni degli aspetti davvero strananti del lavoro in avanti aumenteranno le loro teste a forma di divertente, e impareremo ad amarli comunque.

Nel frattempo, prendi le tue tavole economiche STM32F103 lampeggiate con il nostro binario e prendi un po ‘abituato a giocare nel prossimo ambiente sul chip. Lampeggia alcuni LED. look around the Mecrisp-Stellaris glossary and the embello API documentation. Or just type list to see all the command at your disposal and start hacking away.