Uso del Timer
CC BY-SA 4.0 https://creativecommons.org/licenses/by-sa/4.0/
Workspace: Getting-started-with-NUCLEO-F401RE-and-mbedOS
Progetto: stm32nucleof401re_03_timer
Materiale: Scheda NucleoF401RE - Cavo micro USB
In questo progetto di esempio, vedremo come utilizzare un timer nel codice.
Utilizziamo la toolchain già vista qui. Apriamo il progetto con un doppio click.
Il progetto contiene la cartella con il codice sorgente mbed-os ed il file main.cpp, il nostro file entry-point.
Per utilizzare un timer, dobbiamo definire una variabile di tipo Timer.
Timer timer;
Il conteggio del tempo trascorso inizia con l’invocazione di un apposito metodo start() da invocare sull’istanza dell’oggetto timer.
timer.start();
Il tempo trascorso da quando il timer è stato avviato, si ottiene invocando i metodi di lettura. Il valore può essere letto in secondi
float t = timer.read();
oppure in millisecondi
int t = timer.read_ms();
o ancora in microsecondi
int t = timer.read_us();
Inoltre il timer può essere resettato
timer.reset();
Il metodo reset() non interrompe il conteggio. Questo puo essere interrotto con il metodo stop().
timer.stop()
Nel progetto di esempio, dopo aver incluso le librerie
#include "mbed.h"
ed aver definito le variabili globali
Timer timer;
Serial pc(USBTX, USBRX);
DigitalOut myled(LED1);
troviamo la funzione entry point
int main() {
// The timer is started calling its method 'start'. We refer to the Timer by the name of the instance
timer.start();
// It print to the serial client a string
pc.printf("It works!\r\n");
// Infinite loop. The instructions in the loop will be repeated forever
while(1) {
wait(1);
// The timer is read calling its method read_ms. It returns the elapsed time in ms
pc.printf("This program runs since %d seconds.\r\n", timer.read_ms()/1000);
// It change the led status. We will see the led blinking
myled = !myled;
}
}
nella quale facciamo partire il conteggio del tempo, stampiamo un messaggio sulla seriale per essere informati attraverso un client come puTTy che il programma e “running” e sta funzionando ed entriamo poi nel ciclo infinito.
Nel ciclo troviamo l’istruzione
wait(1);
che interrompe l’esecuzione del codice per 1 secondo, poi stampiamo sulla seriale il tempo in secondi facendo una lettura in millisecondi.
pc.printf("This program runs since %d seconds.\r\n", timer.read_ms()/1000);
Il valore letto verrà stampato nella posizione di %d.
Infine neghiamo lo stato del led.
myled = !myled;
In questo modo otterremo che il led sulla scheda lampeggia con un periodo di 1 secondo, e vedremo sul client puTTy un messaggio ogni secondo.
A questo punto possiamo passare alla compilazione con un click sull’icona che rappresenta un martello.
Se tutto è andato a buon fine, tra i messaggi nella console sarà indicato il path del file binario ottenuto dalla compilazione
Per programmare la scheda Nucleo, dopo averla connessa al PC via USB, copiare il file stm32nucleof401re_03_timer.bin, nel drive NODE_F401RE.
Per verificare il corretto funzionamento del programma, utilizziamo il client puTTy. (Per maggiori dettagli vedi qui)
Dopo il primo messaggio “It works” vedremo un messaggio al secondo come segue