[Tutorial ARM STm32] STm32F4-Discovery + Eclipse + GNU Toolchain + OpenOCD + ChibiOS sotto Windows

In questo tutorial illustrerò come configurare l’ambiente di sviluppo Eclipse in modo da poter utilizzare il sistema operativo realtime ChibiOS sulla scheda STm32F4-Discovery e poter debuggare il codice scritto sotto Windows8. Se siete arrivati a questa pagina probabilmente avete già una scheda STm32F4-Discovery tra le mani e sapete già cosa è ChibiOS, per questo tralascio ogni spiegazione al riguardo rimandandovi eventualmente ai siti ufficiali. Il tutorial che segue è stato testato con la versione Kepler di Eclipse e la versione 0.7 di OpenOCD. E’ molto probabile che l’utilizzo di versioni diverse dei software citati abbia bisogno di piccole modifiche alle configurazioni per poter funzionare. Il tutorial si basa sulle guide messe a disposizione dal sito ufficiale del sistema operativo ChibiOS (Setting up an Eclipse-based IDE – Using an Eclipse-based IDE – Using ST-Link into an Eclipse environment) più altre informazioni sulla corretta configurazione di OpenOCD (Setting up Debugging with the Eclipse IDE) quale server di debug gratuito. Innanzitutto è necessario installare Eclipse. La procedura è molto semplice, ma non standard per un utente medio dei sistemi operativi Windows. Eclipse infatti non ha un suo “installer”, ma viene distribuito “as is” in un file compresso. Per mia scelta personale tutto ciò che riguarda la programmazione è contenuto nella cartella “C:\devel”, a questa cartella farò sempre riferimento nel proseguimento del tutorial, ognuno è libero di cambiare questo parametro secondo i propri gusti e usi:

  • scaricare Eclipse
  • creare la cartella “C:\devel” se non esiste
  • decomprimere la cartella “eclipse” contenuta nel file scaricato nella destinazione scelta, “C:\devel\” nel nostro caso
  • creare opzionalmente un link al file eseguibile “eclipse.exe” sul desktop per non essere obbligati ad aprire il File Manager ogni volta che vogliamo aprire l’IDE
  • Eseguire Eclipse e scegliere la cartella “C:\devel” come workspace

Se non avete mai installato una Java Virtual Machine sul vostro sistema è probabile che Eclipse si blocchi con una finestra di errore analoga a quella riportata in figura

Eclipse Java Error

Eclipse Java Error

Per risolvere il problema scaricate l’ultima versione di JRE facendo molta attenzione nello scaricare la stessa versione (32bit o 64bit) di Eclipse. Una volta installata JRE verificate che il path alla cartella bin (es. C:\Program Files\Java\jre7\bin\) sia presente nel path di sistema. A questo punto è necessario installare una toolchain in grado di compilare il codice C/C++ per processori ARM a 32 bit. La mia scelta è caduta sulla versione “ufficiale” del compilatore GNU gcc:

  • Scaricare e installare “GNU Tools for ARM Embedded Processors
  • Verificare che il path del file “arm-none-eabi-gcc.exe” sia contenuto nella variabile “PATH” di sistema (es. C:\Program Files (x86)\GNU Tools ARM Embedded\4.7 2013q2\bin)
  • Verificare che il path del file “gcc.exe” sia contenuto nella variabile “PATH” di sistema (es. C:\Program Files (x86)\GNU Tools ARM Embedded\4.7 2013q2\arm-none-eabi\bin)

Aprire Eclipse e installare il plugin “GDB Hardware Debugging“:

  • Help→Install New Software…”
  • Selezionare “–All Available Sites–
  • Scrivere “GDB” nella barra dei filtri
  • Selezionare “C/C++ GDB Hardware Debugging
  • Seguire le istruzioni a video per installare il plugin
  • Riavviare Eclipse

La toolchain non è sufficiente per poter compilare in modo semplice, sotto Linux esiste un tool chiamato “make” che analizza un file di script denominato “makefile” contenente le istruzioni per compilare tutti i file di un progetto ed eseguire il linking finale per ottenere il file binario contenente il codice da inviare al microcontrollore per la sua esecuzione. Questo tool non esiste di default sotto Windows, ma può essere installato scaricando YAGARTO Tools ed eseguendo la sua installazione. Terminata l’installazione controllare che il path alla cartella bin sia contenuto nel path di sistema di Windows (es. “C:\devel\yagarto-tools-20121018\bin“).

YAGARTO non è ancora sufficiente. Il sistema “make” utilizza comandi Linux per eseguire alcune operazioni. Un comando in particolare è utilizzato durante la pulizia del progetto: “rm”. “rm” equivale al comando win32 “del” e può essere installato scaricando e installando GNUwin32 e aggiungendo il path della cartella “bin” (es. C:\Program Files (x86)\GnuWin32\bin) al path di sistema.

A questo punto è possibile scaricare e installare ChibiOS dal sito ufficiale:

  • Aprire la pagina di download di ChibiOS e scaricare l’ultima versione
  • Decomprimere il file nella nostra cartella di sviluppo “C:\devel

Possiamo ora verificare che il nostro ambiente di sviluppo sia in grado di compilare per ARM:

  • se non è già aperto, riaprire “Eclipse
  • fare click con il tasto destro in “Project Explorer” e selezionare “Import…
  • selezionare “C/C++ → Existing Code as Makefile Project” e premere Next
  • selezionare “GNU Autotools Toolchain” e premere Browse
  • aprire la cartella contente l’esempio base per STm32F4-Discovery (es C:\devel\ChibiOS_2.6.0\demos\ARMCM4-STM32F407-DISCOVERY) e premere Finish
  • a questo punto nella finestra “Project Explorer” è visibile il progetto “ARMCM4-STM32F407-DISCOVERY
  • fare click con il tasto destro sulla “root” del progetto e selezionare “Build Project
  • se tutto è andato a buon fine dopo circa un minuto la demo sarà compilata e nella finestra “Console” di Eclipse avremo un messaggio del tipo “15:09:46 Build Finished (took 39s.496ms)

Il firmware in formato binario appena generato è contenuto nella cartella “C:\devel\ChibiOS_2.6.0\demos\ARMCM4-STM32F407-DISCOVERY\build” con il nome “ch.bin“. Dobbiamo ora installare i driver del programmatore ST-Link V2 integrato sulla STm32F4-Discovery per poter inviare il firmware appena generato:

  • Scaricare e installare “ST-LINK/V2 USB driver for Windows 7, Vista and XP” da qui
  • Scaricare e installare “STM32 ST-LINK utility” da qui
  • Collegare la STm32F4-Discovery al PC tramite un cavo mini-usb collegato a “CN1
  • Attendere la corretta configurazione dei driver e riavviare il PC se richiesto
  • Aprire il programma “STM32 ST-LINK Utility
  • Premere l’icona “Connect to Target“. Se i driver sono stati correttamente installati si riceverà un messaggio del tipo “15:20:11 : Device family :STM32F40x/STM32F41x
  • Inviamo il nostro Firmware aprendo il file “ch.bin” generato in precedenta tramite “Open file” e premendo l’icona “Program verify.
  • Nella message box premere “Start” per iniziare la programmazione
  • Se tutto è andato a buon fine si otterrà un messaggio del tipo “15:22:23 : Verification…OK“. Il led arancione della scheda inizierà a lampeggiare con una frequenza pari a 1 Hz, successivamente inizieranno a lampeggiare anche i led blu e verde, il cui significato è spiegato nella pagina ufficiale della demo.

A questo punto siamo in grado di compilare Software per la STm32F4-Discovery sotto sistema operativo Real Time ChibiOS, possiamo inviare il firmware alla scheda, ma non possiamo ancora eseguire l’operazione essenziale per ogni programmatore: il DEBUG. Come anticipato utilizzeremo OpenOCD come server di debug:

  • Scaricare la versione 0.7 di OpenOCD precompilata per Windows dal sito “Freddiechopin
  • Decomprimere il file nella solita cartella “C:\devel
  • Aprire una console di sistema (“Prompt dei comandi“) e digitare il comando “cd \devel\openocd-0.7.0\bin” (se utilizzate un sistema a 64bit andate nella cartella “bin-x64” altrimenti il collegamento con la scheda non verrà effettuato)
  • Lanciate il server di Debug con il comando “openocd-0.7.0.exe -f ..\scripts\board\stm32f4discovery.cfg“. Se tutto è funzionante (ricordatevi di chiudere l’applicazione “STM32 ST-LINK Utility” prima di eseguire il server) otterrete una finestra analoga a quella dell’immagine successiva
    OpenOCD Running

    OpenOCD Running

Il server di Debug è ora funzionante, possiamo eseguire il nostro primo debug tramite Eclipse:

  • Aprite Eclipse… se la demo per STm32F4-Discovery che avete già compilato non si apre automaticamente riapritela
  • Run → Debug Configurations…”
  • Fare doppio click su “GDB Hardware Debugging” per generare la nuova configurazione di debug
  • Se il campo “Project” è vuoto premere Browse e selezionare il progetto corrente

    Debug

    Debug

  • Il campo “C/C++ Application” si dovrebbe automaticamente popolare con il file “build\ch.elf
  • Cliccare sul tab “Debugger
    Debugger

    Debugger

  • Inserire “arm-none-eabi-gdb” nel campo “GDB Command
  • Inserire “3333” nel campo “Port Number”
  • Cliccare sul tab “StartUp

    StartUp

    StartUp

  • Inserire “monitor reset halt” nel campo “Initialization Commands
  • Assicurarsi che “Load Image” e “Load Symbols” siano selezionati. Nota: deselezionando “Load Symbols” il firmware sarà scaricato sul microcontrollore senza le informazioni di debug. Questa procedura è quindi utile anche per programmare la scheda con il FW definitivo
  • Scorrere l’interfaccia verso il basso, selezionare “Set Breackpoint at” e inserire “main” nella casella in modo che all’inizio di ogni debug l’esecuzione venga automaticamente interrotta sul primo comando della funzione principale “main” (deselezionare la casella se questa funzionalità non è voluta)
  • Cliccare sul Tab “Common” e assicurarsi che “Debug” sia selezionato in modo da aggiungere una voce inerente questa configurazione nella toolbar di Eclipse sotto l’icona di debug.

    Common

    Common

  • Nota: a questo punto alcune guide suggeriscono di cliccare su “Select Other…” sul fondo della finestra per sostituire “GDB (DSF)” con “Standard GDB“. Con questa impostazione io ho avuto dei problemi nello startup del debug, per questo suggerisco di non farla.
  • Premere “Apply” e “Close“… il sistema è pronto per eseguire in primo debug su STm32F4-Discovery

Eseguiamo ora il primo debug:

  • Collegare la Discovery alla porta USB se per qualche motivo è stata scollegata. Il FW precedentemente caricato tramite ST-Link V2 inizierà la sua esecuzione e i led inizieranno a lampeggiare.
  • Avviare il Server OpenOCD (se è stato fermato) seguendo la procedura precedentemente illustrata
  • Premere il triangolo nero vicino all’icona di debug nella toolbar di Eclipse
  • Selezionare la prima voce del menu per avviare il debug
  • Se Eclipse chiede di passare nella “Prospettiva di Debug” confermare
  • Premere l’icona con il triangolino verde o F8 per dare il via all’esecuzione del codice
  • Il debug verrà avviato, i led sulla Discovery smetteranno di lampeggiare e nella finestra del codice verrà mostrato il primo comando della funzione “main“.

    Degub Running

    Degub Running

  • BUON DEBUG

Il tutorial è terminato, la procedura di configurazione è molto lunga, ma se seguita in modo preciso non dovrebbe generare problemi. Se avete domande, avete notato delle imprecisioni, qualche passaggio vi risulta criptico non esitate a inserire un commento, risponderò il più celermente possibile. Un sentito ringraziamento a Mauro Soligo di Katodo.com per aver testato il tutorial e aver permesso di migliorare alcuni step.

Lascia un Commento

This site uses cookies. Find out more about this site’s cookies.
%d bloggers like this: