Uso del Timer con la scheda NucleoF401RE

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