
Abbiamo visto insieme che cos'è ChibiOS/RT, come funziona e perchè è interessante. Vediamo, adesso, che cos'è e come funziona ChibiStudio, l'IDE disponibile in ChibiOS per scrivere codice, debuggare e caricare il progetto sulla nostra board. Analizzeremo uno dei progetti demo presenti nella distribuzione, che utilizza led e accelerometro della board STM32F4 Discovery.
Installazione
Possiamo scaricare ChibiStudio da qui.
Al momento l'ultima versione disponibile è la ChibiStudio_Preview5.7z. Scompattiamo l'archivio nel quale troveremo la cartella principale Chibistudio.
In essa troviamo:
-
chibios, è la cartella contenente la distribuzione del ChibiOS
-
eclipse, questo è il vero e proprio ambiente di sviluppo, ChibiStudio non è altro che una customizzazione di Eclipse
-
tools, contiene la toolchain open source per la compilare e debuggare
-
workspace, questo è la cartella per i nostri progetti.
Attenzione: per poter eseguire ChibiStudio è necessario aver installato il jdk 7 di Java, altrimenti l'ambiente non partirà.
La documentazione di ChibiOS si trova sotto la cartella chibios\docs ma è da "generare" usando doxygen (se non avete doxygen lo potete trovare qui , nella documentazione ci sono anche molte immagini che verranno generate, ma occorre installare anche Graphviz che trovate qui).
Apriamo DoxyWizard ed utilizziamo il file Doxyfile_html se vogliamo la documentazione in formato html, oppure Doxyfile_chm se la vogliamo in formato help file.
Oppure possiamo usare la shell con:
doxygen Doxyfile_html
Board
Prima di collegare la board al PC, scarichiamo il file st-link_v2_usbdriver.zip da qui.
Apriamo il file zip e lanciamo l'eseguibile contenuto all'interno. A questo punto, colleghiamo la board al PC; al primo utilizzo ci verrà richiesta l'installazione del driver per ST LinkV2, che è il debugger e programmer a bordo della discovery.
Build
Lanciamo ChibiStudio cliccando sul link che troviamo nella cartella d'installazione.
Alla prima esecuzione apparirà la schermata di benvenuto tipica di Eclipse. Chiudendo la schermata apparità la view di lavoro, con il workspace di default di ChibiStudio.

Qui troviamo i progetti demo già pronti per la famiglia di MCU STM32.

Clicchiamo sul nodo "STM32 Demos" e qui sotto troveremo il progetto "ARMCM4-STM32F407-DISCOVERY-MEMS" che possiamo aprire premendo il tasto destro e scegliendo nel menu contestuale "Open Project".
Una volta aperto il progetto, sempre con il tasto destro del mouse scegliamo "Build Project".

Se tutto è andato a buon fine, troveremo nella console "Build Finished" e sotto la cartella build il progetto compilato e linkato in vari formati (ch.bin e ch.elf) con un file di descrizione ch.map

Debugging
ChibiStudio include OpenOCD (Open On-Chip Debugger), con cui è possibile flashare e debuggare direttamente sulla board. E' necessario quindi connettere OpenOCD al built in debugger della Discovery. Andiamo sulla toolbar di gestione dei tool esterni e clicchiamo su "OpenOCD on ST-Link V2". Si aprirà una finestra e dovremo indicare lo script necessario a OpenOCD. Per la discovery il file da utilizzare è:
C:\ChibiStudio\tools\openocd\scripts\board\stm32f4discovery.cfg

Nella console vedremo l'output dell'operazione.

E' ora possibile eseguire il debug: andiamo nella toolbar sul menu del tasto Debug e scegliamo "ARMCM4-STM32F407 .. (Open OCD, Flash and Run).

Vi segnalo la view "ChibiOS/RT" con la quale è possibile esaminare globali, thread, timer e trace buffer.
Basta mettere in "Suspend" il debugger e premere il tasto "Refresh" nella view.

Il progetto demo
Il progetto demo presente in ChibiOS è molto semplice: legge i dati dell'accelerometro MEMS tramite interfaccia SPI ed accendende i led RGB della board. La routine principale viene fatta in un thread ed seguita ogni 250 ms.
Analizziamo il main per capire come è scritta questa semplice demo partendo dalle inizializzazioni dei driver utilizzati.
halInit(); chSysInit();
questa righe inizializzano lo strato HAL e il Kernel di ChibiOS. Sono le prime istruzioni da utilizzare per utilizzare ChibiOS.
Proseguendo troviamo:
spiStart(&SPID1, &spi1cfg);
cioè, viene inizializzato il driver SPI per la porta 1 ed un secondo driver SPI sulla porta 2.
La STM32F4 discovery ha 3 porte SPI disponibili. In generale, è possibile configurare ChibiOS a compile time, escludendo quelle feature che non sono necessarie al progetto e guadagnado così spazio. Per il progetto troverete il file mcuconf.h nel quale sono presenti varie define che vanno a sovrascrivere le impostazioni di default di ChibiOS.
Alla riga 225 trovate:
#define STM32_SPI_USE_SPI1 TRUE #define STM32_SPI_USE_SPI2 TRUE #define STM32_SPI_USE_SPI3 FALSE
spi1cfg è una struttura dati che contiene le impostazioni per la porta SPI 1. In ChibiOS di solito queste struct utilizzate per inizializzare i driver, hanno sempre una parte “generica” ed una dipendente dall’implementazione in uso, cioè dall’hardware che stiamo utilizzando.
Per il nostro progetto la struct è così inizializzata:
static const SPIConfig spi1cfg = { NULL, /* parte dipendente dall'HW.*/ GPIOE, GPIOE_CS_SPI, SPI_CR1_BR_0 | SPI_CR1_BR_1 | SPI_CR1_CPOL | SPI_CR1_CPHA };
la prima è una callback da effettuarsi quando il trasferimento è completo. Le restanti sono il port relativo alla line di chip select, il numero del pin (per la Discovery è il 3 sul port GPIOE) e le impostazioni per la porta (velocità 5.25MHz, CPHA=1, CPOL=1, 8bits frames, MSB).
I dati letti dall'accelerometro su SPI 1 vengono trasmessi alla SPI 2 i cui pin sono:
PB12 - NSS. PB13 - SCK. PB14 - MISO. PB15 - MOSI
Per regolare l’intensità dei led viene utilizzato il driver PWM (Pulse Width Modulation).
pwmStart(&PWMD4, &pwmcfg);
Alla linea 109 troviamo la configurazione (100 kHz, 128 tick per il periodo).
Ora che i driver sono stati inizializzati creiamo il thread:
chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO + 10, Thread1, NULL);
la macro WORKING_AREA alla linea 154 alloca staticamente lo spazio necessario allo stack del thread, più la memoria necessaria alla gestione del thread.
Alla linea 155 troviamo il sorgente del thread principale.
Per gestire l’accelerometro LIS302DL viene utilizzato un componente presente nella cartella various dell ChibiOS.
#include "lis302dl.h"
Nel loop infinito del thread troviamo l’algoritmo principale che consiste in :
-
leggere i dati x,y (linea 180)
-
ritrasmettere i dati su SPI porta 2 (linea 184)
-
calcolare la media delle ultime 4 letture (linea 190)
-
utilizzare il driver PWM per variare l’intensità dei led (linea 196).
Se utilizziamo l'altra porta USB disponibile sulla board, si può utilizzare una shell di comandi per lanciare i 3 comandi che sono nella demo alla linea 88. Una volta attaccato il cavetto USB ci verrà richiesto di installare un ulteriore driver, si tratta di una Virtual Com ed il driver può essere scaricato qui.
Alla fine dell'installazione avremo una nuova porta COM, nel mio caso è la COM6.

Effettuiamo la connessione tra ChibiStudio e la Discovery utilizzando la Terminal, cliccando sulla terza icona "Settings", configuriamo la Virtual COM e poi clicchiamo su "Connect".

Ora mettendo il cursore nel terminale e premendo il tasto Enter, apparirà una shell di comandi.
Digitiamo "help".

Se proviamo ad esempio il comando "mem" otterremo:

E con questo, abbiamo finito. Semplice, vero?
Buon Debugging a tutti!

Ho già tutto il materiale e sto seguendo queste pubblicazioni anche da utente. Mi manca un po’ il tempo per provare ma da quando ho sentito parlare di ChibiOS ne sono stato subito molto interessato.
Vi farò sapere come mi son trovato 🙂
PS: L’stm32f4 mi piace tantissimo come scheda 🙂 Le manca giusto un display, e poi è perfetta 😀
L’avevo capito, visto che è da un po’ che ce non ne parlavi ma ricordo una puntata di review4u in cui ne parlavi entusiasta!
Io me la sono procurata da poco, ho poco tempo per giocarci ma hai ragione sul fatto che è ottima.
Peccato solo per il pinout così strano.
Ecco !
http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1848/PF259090
Prova questa!
http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1847/PF260000
Ciao
io ho sempre utilizzato arduino e ora vorrei imparare ad usare chibios+ stm32f3, purtroppo per me sono un neofita di questa scheda e RTOS.
Devo dire che i tuoi articoli sono interessanti; io sto cercando materiale sulle varie funzioni che si utlizzano ecc, diciamo che non ho trovato abbastanza materiale per esempio un manuale per chi vuol incominciare.
Dal sito di arduino diciamo che ci sono i primi passi cosa che nn ho trovato per questa scheda.
Ti chiedo se hai suggerimenti da darmi
ps: ho installato chibios con F3
Scusa, forse l'orario, ma non ho capito cos'è e che c'entra.
Purtroppo un manuale al momento non esiste, puoi però provare la demo per la F3 che trovi in ChibiOS per cominciare a capire di che cosa si tratta.