STM32F4Discovery, recensione per Review4U

La STM32F4 Discovery é la demo board che ho avuto la fortuna di vincere al mio primo Review4U; ero iscritto da pochissimo e mai mi sarei immaginato di poter mettere la mani su tanta potenza e versatilitá. In questo articolo vedremo le caratteristiche di questa scheda e vedremo come poterla utilizzare con Linux :

Chi ha avuto modo di conoscermi leggendo qualche commento che ho scritto, sa che sono un principiante nel campo dell'elettronica, materia che mi ha sempre affascinato ma che ho sempre guardato da lontano, ripromettendomi che prima o poi mi sarei ritagliato il tempo per dedicarle studio e approfondimento. Questo momento é finalmente arrivato, ed é stato proprio il mio interesse verso l'elettronica che mi ha portato qui, presso questa comunitá.

Ho una discreta esperienza nel settore informatico grazie a mie passate esperienze di lavoro, ma devo ammettere che i Microcontrollori mi erano quasi sconosciuti. Frequentando Elettronica Open Source mi sono reso conto di quanto si possa realizzare con essi e come, in un certo senso, rappresentino un po' il punto di contatto tra l'informatica, mi riferisco alla parte della programmazione, e l'elettronica, e qui mi riferisco ovviamente a tutto l'hardware di cui il Microcontrollore diventa cuore e mente. Oggi é quindi un inizio, il punto di partenza di un principiante che si avvicina a questo mondo con molta voglia di imparare e tante idee che nascono rigogliose nella mente ma che ancora non ha ben chiaro come possano essere realizzate.

L'idea con cui ho vinto la scheda era ambiziosa, realizzare un braccio meccanico per le carrozzine dei disabili; un arto applicabile a qualsiasi modello di carrozzina che potesse aiutare il disabile a svolgere alcune semplici funzioni quotidiane. Non so se mai riusciró a realizzare un simile progetto, ma é certo che da qualche parte bisogna pur iniziare, proveró quindi, nei mesi a venire, a realizzare con questa scheda esperimenti (che diventeranno articoli) sempre piú complessi che accompagneranno il mio percorso di apprendimento e studio dell'elettronica e dei Microcontrollori, con il fine ultimo di riuscire a realizzare l'idea con cui ho vinto la Review4U. Spero di riuscirci, e spero di avere, da parte vostra,  tutto l'aiuto possibile, in termini di consigli e critiche.

Lasciamo ora i buoni propositi e le chiacchiere per cominciare a parlare di questa magnifica board.

La STM32F4 Discovery é una scheda di sviluppo prodotta dalla STMicroelettronics che intergra un Microcontrolore Arm Cortex M4 a 32bit. Il microcontrollore é giá di per se molto, ma anche il resto della dotazione della scheda non scherza certo, vediamo nel dettaglio i componenti:

  • microcontrollore STM32F407VGT6 (ARM Cortex-M4 da 32-bit, equipaggiato con 1 MB Flash, 192 KB RAM e package LQFP100);
  • ST-LINK/V2 on -board, con "selection mode switch" per utilizzare il kit come standalone ST-LINK/V2 (grazie al connettore SWD per la programmazione ed il debug);
  • Power Supply: via USB oppure tramite alimentazione esterna (5 V oppure 3.3 V);
  • Accelerometro: LIS302DL, MEMS della ST, tri-assiale con output digitale;
  • MP45DT02, sensore audio MEMS della ST, un microfono digitale omnidirezionale;
  • CS43L22, DAC audio con speaker driver di classe D integrato;
  • 8 LED;
  • due pulsanti (user e reset);
  • USB OTG FS con connettore micro-AB.

Ci troviamo quindi in presenza di un prodotto di altissimo livello con forte indirizzo industriale. La politica di prezzo scelta dalla ST lo conferma, solo 14,83€ + IVA presso Farnell Italia e solo 12,29 + IVA qui in Germania. Prezzi decisamente bassi per la dotazione della scheda, che testimoniano inequivocabilmente l'intenzione di ST di non lucrare sulla board ma di farne conoscere e provare i suoi componenti nel modo piu diretto e ampio possibile.

La confezione si presenta ovviamente minimale, la scheda incassata in un involucro di plastica trasparente ed un cartoncino con le istruzioni per un immediato Getting Started, l'indirizzo web della pagina del prodotto, i “System Requirements”, e un elenco di “developement Toolchains “ consigliate.

Niente di piú, a questo prezzo non si puó certo pretendere cavetti usb, cd con Software o altro. Non é comunque un problema, chi non ha a disposizione almeno un paio di cavetti Mini USB, residuati di qualche vecchio telefonino, lettore mp3, o altro? A cosa serve poi un CD quando sul sito della ST posso trovare qualsiasi cosa di cui possa aver bisogno?

Bene, a questo punto nulla osta a cominciare a lavorare sulla scheda. Provo subito la mini Demo che é gia caricata in memoria; collego la scheda al pc con il cavetto Mini USB tipo A alla presa del debugger, il LED di alimentazione si accende subito, premendo uno dei due tasti i 4 LED disposti attorno all'acelerometro si illuminano in funzione del movimento e all'inclinazione della scheda. Un altra cosa che posso fare immediatamente é collegare un cavetto Mini USB Tipo B all'altra presa, la scheda viene riconosciuta dal computer come uno standard mouse e muovendola possiamo vedere il puntatore che si muove sul nostro schermo.

Ok, primo approccio assolutamente positivo, ora vorrei vedere di piu...

Inizio ovviamente da internet, e mi collego al sito della ST. La pagina della scheda é come la confezione, altrettanto minimale, una breve descrizione e un lungo elenco di files in .pdf da scaricare, non si puo certo dire che non ci sia da leggere!! Comincio dal Datasheet; tre paginette con una descrizione dettagliata dei componenti della scheda e di nuovo i system requirements ed elenco di toolchains per lo sviluppo. Passo allo User Manual, e qui comincia a farsi interessante, infatti se fino ad ora poteva sembrare che la ST fosse stata parca di ducumentazione ed informazioni, con questo documento, e con il Programming Manual poi, ci si deve proprio ricredere. La scheda viene presentata dettagliatamente in ogni sua parte, caratteristica, valore piú nascosto, insomma, una radiografia completa, il tutto spiegato evidentemente molto bene dato che persino io, che sono completamente ignorante in materia, sono riuscito a comprendere qualche passaggio. Un esperto sarebbe in grado, con una sfogliata veloce di inquadrare il prodotto ed immaginare come impiegarlo giá durante la lettura. Io, devo ammettere, che all'inizio ho sudato un po' freddo, mi ha spaventato questa mole di dati e informazioni tecniche che, comunque, si rifanno a concetti di struttura e architettura dei processori, di gestione della memoria, gestione delle istruzioni ecc., tutte cose che disconosco completamente e quindi, per quanto ben spiegate, mi risulta molto difficile capire. Ad ogni modo, non mi sono fatto scoraggiare e fiducioso che attraverso qualche tutorial, e magari un po'piú qualche approfondimento in materia, riusciró anche io a capire fino in fondo quel piccolo francobollo nero piazzato al centro della mia board, e arrivare un giorno a spremerne ogni goccia di potenztialitá.

Per ora rimango con i piedi per terra e il mio primo obiettivo é l'accensione di un LED, come potrebbe mancare?

L' "Hello World" delle board! Da che parte cominciare? Bene la ST non si smentisce nella sua politica di completezza di supporto, sempre dalla pagina della scheda possiamo scaricare un pacchetto di esempi che, divisi per categoria, portano a conoscere in pratica ogni aspetto della board e permettono di toccarne con mano ogni funzione ed ogni componente. Fin qui tutto molto bello e diciamo “facile”, dove sorgono i problemi? In realtá non sono veri e propri problemi, diciamo meglio “complicazioni”. Le complicazioni stanno nel fatto che ST assume per scontato che si sia tutti utenti Microsoft Windows e quindi tutto il software fornito e consigliato dalla casa produttrice della board é esclusivamente per questa piattaforma. Come fare? Si rinuncia? No assolutamente no, fortunatamente al mondo ci sono molti sviluppatori ARM che sono anche utenti Linux e quindi mi é bastato cercare in rete per trovare molti tutorial ed esempi da seguire per poter utilizzare la mia scheda anche col Pinguino.

Vediamo quali sono i fondamentali per programmare i processori ARM con LINUX. Servono semplicemente tre cose:

  • un Compilatore;
  • una utility di dialogo con il debugger on board;
  • un IDE per la scrittura del codice.

A voler essere precisi l' IDE non é poi cosí necessario, esistono ancora puristi della programmazione che preferiscono scrivere con un semplice editor di testo ed affidare poi al compilatore il resto del lavoro. "Vecchia scuola", se cosí possiamo definirla, sembra comunque opinione di molti che sia ormai veramente difficile rinunciare alle grandi comoditá offerte dagli IDE di ultima generazione... de gustibus !

Il compilatore piú consigliato al momento é il GNU Tools for ARM Embedded Processors, é basato su GCC ed é mantenuto e rilasciato gratuitamente dal personale di ARM, troverete maggiori informazioni qui.

Per quanto riguarda il debugger, dobbiamo procurarci un software che dialoghi con la scheda e ci permetta di fare l'upload del firmware;  il texane/st-link é un software a riga di comando che svolge questa funzione, é possibile scaricarlo da qui, ma per chi volesse evitare l'uso della shell esiste anche la versione grafica, scritta con librerie QT e chiamata Qstlink2, qui l'indirizzo della pagina dedicata.

Ultimo passo, la scelta dell'IDE. Eclipse é indubbiamenbte il piú utilizzato ma per questo articolo utilizzeró NetBeans e spiego subito il perché. Grazie alla potenza, velocitá e versatilitá di questi microconntrollori, esistiono  dei veri e propri sistemi operativi pensati per loro, un esempio importante é sicuramente  ChibiOS/RT , ne esistono altri, quello che ho scelto io si chiama MIOSIX (qui la home) e si configura con NetBeans.

Miosix é un Sistema Operativo per Microcontrollori nato nel 2008 per mano di Federico Terraneo, dottorando al Politecnico di Milano e membro del POUL, il gruppo Linux del Politecnico. Ma perché un sistema operativo? Quali sono i vantaggi? I motivi sono diversi, nel caso di Miosix le due princilpali linee guida usate per lo sviluppo del kernel sono:

  • Offrire un ambiente di sviluppo il più possibile “standard compliant”, compatibilmente con le limitazioni hardware dei microcontrollori, in modo da cercare di colmare il gap tra lo sviluppo di applicazioni desktop ed embedded;
  • “You don't pay for what you don't use”, fare in modo (entro certi limiti) che non ci sia performance o code size penalty per le feature non utilizzate. Questo viene effettuato quando possibile automaticamente oppure dove non possibile tramite opzioni di configurazione.

Le principali feature offerte dal kernel sono:

  • Multithreading, tramite un API standard (PTHREADS), consente di spezzare le applicazioni in unità di lavoro eseguite in parallelo, semplificando lo sviluppo di codice;
  • supporto ai linguaggi C e C++, consente la programmazione object oriented anche nei microcontrollori, supporto alla libreria standard del C e del C++, inclusa la STL, exception handling, etc.;
  • Astrazione dell'hardware, tramite API inidipendenti dalla piattaforma per le periferiche più complesse (USB, Display), semplifica la portabilità del codice tra varie architetture hardware.
  • Filesystem, integrato con le librerie standard, consente di accedere ai files tramite la stessa API disponibile su desktop PC (fopen(), fstream);
  • Pluggable schedulers, un API per scegliere lo scheduler da usare nel kernel, a compile time, consente di scegliere lo scheduler più adatto per una data applicazione, e consente di sviluppare e testare scheduler innovativi.

Oltre al kernel, esistono delle librerie specifiche per gestire classi di periferiche particolarmente complesse in modo indipendente dalla piattaforma hardware:

  • mxgui: una libreria grafica in grado di gestire display comunemente usati in dispositivi a Microcontrollori;
  • mxusb: uno stack USB device con un API priva di dettagli implementativi delle periferiche USB.

Come iniziare con questo sistema operativo? Cominciamo subito da questa pagina web  http://www.miosix.org/ , qui troviamo tutte le informazioni che ci servono, oltre che ai link e gli indirizzi per  il download. Per prima cosa ci serve Miosix, quindi da console digitiamo:

poi dobbiamo installare la toolchain, ci posizioniamo nella cartella compiler, apriamo e leggiamo subito il file readme.txt . Dobbiamo prima installare alcuni files e librerie necessari:

poi possiamo passare al compiler per Miosix. Nella cartella compiler dobbiamo lanciare in tre passi gli script ./download, ./install-script.sh, e ./cleanup.sh. Prima peró non dimentichiamo di rendere gli script eseguibili cosi:

 

La tollchain va completamente compilata, quindi non c'e da preoccuparsi se prende del tempo.

Una volta finito non ci rimane che scaricare NetBeans da qui e, completata l'installazione, configurarlo per Miosix. Da Tools>Options>C++ sotto la finestra in basso a sinistra selezioniamo Add e riempiamo i campi nel seguente modo:

poi:

ed infine:

bene, NetBeans é a posto, chiudiamolo per un attimo, abbiamo ancora un'ultima cosa da fare, un ultimo passo, ma non per questo meno importante, dobbiamo installare Qstlink2 da qui, aggiungiamo il PPA e installiamo.

Abbiamo finito! Siamo finalmente pronti per scrivere un po' di codice e far accendere il LED. Collego la scheda al pc, lancio Qstlink2 e clicco su Connect, quando la scheda é stata riconosciuta clicco su Receive, in modo da salvarmi il file originale di fabbrica, quindi clicco su Disconnect. Passiamo ora a NetBeans, lo lanciamo e in alto a sinistra selezioniamo open project, selzioniamo la cartella Miosix e confermiamo. Una precisazione, Miosix puó essere utilizzato su diverse board 32bit della ST, per cui dobbiamo editare due file per far si che venga poi compilato correttamente per la STM32F4-Discovery. Dallo stesso ambiente dell'IDE editiamo i files contenuti nella cartella miosix/config denominati Makefile.inc e miosix_settings.h.

Il primo per stabilire esattamente il tipo di board che stiamo impiegando, il secondo per disabilitare l'uso del filesystem, perché la STM32F4-discovery non ha lettore di card o altro. Assicuriamoci inoltre che nel menu in alto accanto all'iconcina di compilazione sia selezionato il nostro modello di scheda.

Passiamo ora al codice, facciamo doppio clic sul file main.cpp e cominciamo a scrivere il nostro codice. L'obiettivo é che alla pressione del pulsante un LED si illumini.

Una volta completata la scrittura del codice compiliamo e salviamo.... se tutto é andato a buon fine non devo avere errori di sorta e posso anche chiudere NetBeans.

Ora con Qstlink2 clicco prima su Connect e poi su Send, dalla finesta di dialogo apro la cartella miosix e seleziono il  file .bin che trovo; quello é il firmware bello e pronto, non mi resta che dare invio e aspettare che l'upload del file termini.

Posso chiudere tutto e godermi il risultato di tanto lavoro ! Premo il pulsante della scheda e il LED blu si accende !! Hello World !! anche la mia scheda é venuta al mondo !

E con questo é tutto, spero di essere stato chiaro e abbastanza preciso, spero soprattutto di non avervi annoiato; piú avanti un esperimento molto piu concreto e sostanzioso, alla prossima!

Scarica subito una copia gratis
Tags:

5 Commenti

  1. Avatar photo Antonello 24 Giugno 2013
  2. Avatar photo alex272 24 Giugno 2013
  3. Avatar photo Domenico 23 Gennaio 2015
    • Avatar photo alex272 24 Gennaio 2015
      • Avatar photo Domenico 25 Gennaio 2015

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend