sabato , 7 Dicembre 2019
iten
Home » Elettronica » La guerra delle board di sviluppo: STM32 Nucleo

La guerra delle board di sviluppo: STM32 Nucleo

La storia di Arduino ricalca molte altre storie tipiche del mondo dell'informatica. C'è un mercato consolidato e abbastanza statico. Arriva un nuovo prodotto, sotto molti aspetti dirompente. Tutti lo snobbano, tacciandolo di essere inutile e dalle caratteristiche non adeguate per il mercato in cui si colloca. Tempo qualche anno e si capiscono gli effetti devastanti di quel prodotto. Una vicenda analoga è quella della Nokia quando uscì l'iPhone: la Nokia tacciò l'iPhone di essere un inutile dispositivo destinato al gaming. Sappiamo tutti come è andata a finire.

Oggi i produttori di microcontrollori hanno capito che Arduino non è stato solo un gioco. È una piattaforma che ha avvicinato al mondo dell'elettronica migliaia di persone che ne sarebbero state lontane (frenate dalle ripide curve di apprendimento dei kit di sviluppo classici - che, diciamocela tutta, sono sempre esistiti), per la quale esistono migliaia di librerie, codici di esempio, shield più disparate. Il risultato è che la piattaforma AVR di Atmel ha avuto un successo commerciale senza precedenti, ed i dati di vendita lo dimostrano (almeno stando ad alcune statistiche che si trovano in giro).

mcu-market-share

Io stesso di recente mi sono trovato a dover sviluppare in pochi giorni un progetto conto terzi. Il tempo era stretto, e dovevo uscire con il master del PCB in meno di 10gg. Non ne parliamo del firmware. La cosa più ovvia che mi è venuta in mente di fare è stato prendere Arduino UNO, crearmi il prototipo per verificare la correttezza di alcune cose, scrivere il firmware. Fatto il prototipo, ho realizzato il master del PCB definitivo. L'ho mandato a fare e dopo 10gg avevo sulla mia scrivania un PCB finito su cui ho caricato il firmware e con un paio di modifiche al software avevo finito. Dopo 20gg avevo sulla mia scrivania 50 pezzi di schede da consegnare al cliente. Che stanno girando perfettamente. Chiaramente quella scheda ha un chip AVR ATMega 168p.

Il risultato di tutto ciò è che molti produttori di MCU stanno provando a correre ai ripari, proponendo in giro piattaforme molto più aperte e spesso e volentieri espressamente compatibili con il pinout di Arduino UNO, sicuramente l'Arduino più diffuso e per il quale oggigiorno esiste tutto. Una di queste è la STM32 Nucleo di ST Microelectronics.

La piattaforma STM32 è una gamma di microcontrollori ARM Cortex molto interessanti, a sua volta suddivisa in sottofamiglie ognuna specializzata su alcune funzionalità principali.

stm32_sc1169

Si parte dalla famiglia STM32F0, composta da micro low-cost, che girano fino a 48Mhz e sono basati su un core Cortex-M0. Ho dato uno sguardo ai prezzi che si trovano sui distributori a catalogo, e devo dire che il vantaggio di costo di questa piattaforma è notevole. Si parte con prezzi inferiori ai €0.50 per piccole quantità. Se si fa il paragone (impietoso) con famiglie di micro a 8 bit di altri vendor (tra cui la famiglia AVR su cui è costruita Arduino) il paragone non regge proprio. Si sale poi progressivamente fino ad arrivare alla famiglia F7, dove le performance di questi oggetti cominciano a diventare notevoli (trattandosi di dispositivi true-embedded).

I vantaggi dell'utilizzo di un micro di questa classe sono notevoli. Innanzitutto avete un processore che opera a 32 bit. E questo, per alcune tipologie di applicazioni, è già una cosa non da poco. Per pochi cents in più è possibile acquistare micro della serie STM32F4 che hanno tantissima flash e RAM, ed hanno anche il supporto per un eventuale SDRAM esterna. Le frequenze di clock sono molto spinte, e i vari micro sono declinati in varie versioni che supportano le più disparate periferiche (UART, CAN, SPI, I2C, USB-OTG, ecc, ecc, ecc). Un altro vantaggio è costituita dall'essere dei micro su base ARM Cortex-Mx. Questo significa che, in teoria, a meno di cambiamenti specifici della parte di astrazione hardware (la cosiddetta parte HAL) il codice progettato e compilato per un dato microcrontrollore ARM Cortex può essere portato su un altro micro di un'altra azienda che ha un core compatibile ARM-Cortex. Tuttavia, chiunque nella sua vita ha mai scritto un pezzo di codice "portabile" o peggio ancora ha lavorato con l'hardware, sa che questi ragionamenti sono molto teorici. Vedo veramente difficile che una volta realizzato e testato un codice per un dato micro, si decida a cuor leggero di cambiare piattaforma, anche a fronte di un differente prezzo di mercato (che poi, diciamoci la verità, a meno di parlare di volumi di vendita stratosferici, i prezzi nell'elettronica sono tutti livellati).

Un altro vantaggio molto più concreto è il fatto che per la famiglia ARM Cortex esistono porting della GNU Collection Compiler (gcc) e dei suoi tool di debug. Questo significa che è possibile sviluppare per i micro STM32 con quello che probabilmente è il miglior compilatore oggigiorno esistente, ed adoperare altri ambienti open source per cui c'è supporto costante da parte di community molto vaste. Come vedremo, il porting di gcc per la famiglia ARM-Cortex permette di poter sviluppare immediatamente per questa piattaforma senza dover investire capitali in IDE commerciali.

La scheda di sviluppo STM32Nucelo

In occasione di un evento organizzato dall'ST Microelectronics ad Arzano (vicino Napoli), sono venuto in possesso della succitata scheda di sviluppo ST32NuceloF4, nello specifico il modello STM32Nucelo-F401RE. La scheda è sostanzialmente composta da due macroblocchi: una parte che non è null'altro che un programmatore ST-Link, usato per caricare il firmware sul micro target ed eseguire il debugging, e una parte che è la scheda di sviluppo vera e propria.

nucleo

Quest'ultima e formata da 4 connettori compatibili con il pinout di Arduino UNO R3, più i connettori di espansione della scheda Nucleo denominati Morpho. Su questi ultimi PIN, ci sono rigirati tutti i pin del micro target.

La scelta di adottare un pinout compatibile Arduino è sicuramente positiva. In teoria qualunque delle centinaia di shield esistenti in commercio può essere usata per sviluppare codice con questa piattaforma di ST. Tuttavia, va detto che il grande plus delle shield Arduino non è solo l'hardware, ma anche la presenza di librerie più che collaudate che permettono di usare quella shield. In questo caso, purtroppo, il software va o riscritto daccapo, oppure va pesantemente adattato per funzionare con questa architettura.

Inoltre, il fatto di essere Arduino compatibile non deve trarre in inganno. Questa non è una piattaforma "entry-level" come Arduino, e al momento è poco aperta ai neofiti. La curva di apprendimento di un micro come l'STM32 è molto ripida, soprattutto se si sta partendo da zero con questo mondo. Infine, non c'è un IDE come quello di Arduino che in pochi minuti ci permette di far lampeggiare il nostro led (l'Hello World del mondo elettronico).

Per sviluppare software su questa piattaforma, l'ST distribuisce un set di librerie denominato STM32Cube, disponibile in varie versioni a seconda della famiglia di microcontrolli STM32 (F0, F1, ecc).

stm32cube architecture

L'STM32Cube è un complesso framework di sviluppo progettato per astrarre da tutte le problematiche dell'hardware specifico. Inoltre, fornisce esempi e librerie per l'utilizzo di tantissime periferiche hardware. È un framework molto complesso, che nelle intenzioni di ST mira a semplificare il processo di sviluppo sulla sua piattaforma. Tuttavia, occorre frenare gli entusiasmi. l'STM32Cube è stato pensato per essere adoperato con IDE commerciali. Molto probabilmente, su queste piattaforme si riesce in poco tempo a mettere su una tool-chain di sviluppo funzionante. Nel mio caso ho scelto la strada più difficile, ossia quella di mettere su una tool-chain open source basata su Eclipse e GCC per sviluppare con la scheda STM32Nucleo. Il risultato è che ho impiegato ben 2 fine settimana per arrivare a far lampeggiare il maledetto led della scheda nucleo. In realtà, c'è una strada più veloce, ma lontana dalla strada ufficiale di STM. Di questo parlerò successivamente.

In un prossimo articolo comincerò ad illustrare i passi per mettere su una tool-chain GCC/Eclipse. Proverò a semplificare al massimo il processo, evitando i problemi che ho incontrato lungo la strada. A presto.


Check Also

Come utilizzare la seriale di una scheda STM32 Nucleo

Come vi ho detto nei precedenti tutorial su questa nuova scheda di sviluppo di ST, …

One comment

  1. Davvero un articolo chiarissimo,valido al momento della pubblicazione,come oggi.
    Andrò a cercarmi i nuovi ranking

    Saluti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.