Blink my World, ChibiStudio!

2_cover

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 :

  1. leggere i dati x,y  (linea 180)

  2. ritrasmettere i dati su SPI porta 2 (linea 184)

  3. calcolare la media delle ultime 4 letture (linea 190)

  4. 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!

7 Comments

  1. Max Caruso 6 aprile 2014
  2. Antonello Antonello 8 aprile 2014
  3. Umberto Sorbo 8 aprile 2014
  4. Piero Boccadoro Piero Boccadoro 19 febbraio 2014
  5. Boris L. 20 febbraio 2014

Leave a Reply