Espressif IDF – Timer

Last Updated on 15. October 2026 by SuffocationLink status: OK

Ein beliebtes Beispiel in der Arduino Umgebung ist Blink. Hier wird eine LED mit einer kurzen Pause an und aus geschaltet. Zu Gpio Aktionen kommen wir im nächsten Kapitel, um das Blinken kümmern wir uns hier. Auch in der Arduino Umgebung wird immer geraten, Codeunterbrechungen mit Delay zu vermeiden. Dort gibt es einige Konstrukte mit selbst gestrickten Timern oder ganzen Bibliotheken. In der IDF gibt es als Bestandteil des RTOS Timerfunktionen, diese ermöglichen Funktionsaufrufe zu terminieren. Es gibt zwei Optionen: periodisch und einmalig.

Was benötigt man für einen IDF Timer?

Eine Funktion, welche die folgende Signatur haben muss:

static void timer_callback(void* arg){
}

Die Timerargumente, welche einen Pointer auf die Timerfunktion (s.o.) und einen frei wählbaren Namen enthalten.

 const esp_timer_create_args_t periodic_timer_args = {
                        /* Pointer auf die Funktion */
                        .callback = &timer_callback,
                        /* Der name ist optional*/
                        .name = "periodic"
    };

Jetzt noch den Timer erstellen.

esp_timer_handle_t periodic_timer;
ESP_ERROR_CHECK(
  esp_timer_create(&periodic_timer_args, &periodic_timer)
);  

Dann noch entscheiden, ob dieser periodisch oder nur einmal gestartet werden soll. Der zweite Parameter ist die Auslösezeit in Mikrosekunden (Millisekunden * 1000)

//** periodisch
ESP_ERROR_CHECK(
  esp_timer_start_periodic(periodic_timer, 5000000)
);
        
//** Nur einmal
ESP_ERROR_CHECK(
  esp_timer_start_single(periodic_timer, 5000000)
);

Im Beispiel wird die periodische Ausgabe des Textes aus der Übung 1 alle 5 Sekunden realisiert.

Source code main.c (GitHubLink status: OK)

/** idf example
 *
 * Timed hello world example with output every 5 seconds on the console
 *
 * Some parts are copied from the official idf examples found on 
 * https://docs.espressif.com/projects/esp-idf/en/latest/esp32/
 * 
 * Modified by SteFam @ http://www.fambach.net
 *
 * GPLv3 
 * Blah blah blah, free to use. 
 * I invested some time and mony in those examples if you want to delete this header 
 * please do not forget to mention at least my website, thanks!
*/


#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

// method declaration for timer callbacks
static void timer_callback(void* arg);

void app_main(void)
{
	//* setup timer
	
	//** create arguments for timer task
	const esp_timer_create_args_t periodic_timer_args = {
			/* name of the callback function defined before */
			.callback = &timer_callback,
			/* name is optional, but may help identify the timer when debugging */
			.name = "periodic"
    };
	
	//** create time itself
	esp_timer_handle_t periodic_timer;
	ESP_ERROR_CHECK(esp_timer_create(&periodic_timer_args, &periodic_timer));	
	
	//** start the timer periodic
	ESP_ERROR_CHECK(esp_timer_start_periodic(periodic_timer, 5000000));
	
	//** for a single shot do this
	// ESP_ERROR_CHECK(esp_timer_start_single(periodic_timer, 5000000));
	
}


static void timer_callback(void* arg)
{
    // single console output 
	printf("www.fambach.net\n");
}
Konsolenausgabe – Alle 5 Sekunden wird die Ausgabe ausgelöst.

Conclusion

Es gibt noch viele weitere Optionen in der IDF, um Timer zu nutzen. Hier habe ich nur die Oberfläche der Thematik angekratzt. Für weitere Informationen sei deshalb auf die IDF Dokumentation verwiesen.

Related Posts

Main contributionLink status: Broken

Espressif IDF – KonsolenausgabeLink status: Unknown
Espressif IDF – FehlerbehandlungLink status: Unknown
Espressif IDF – LognachrichtenLink status: Unknown
Espressif IDF – MenuconfigLink status: Unknown
Espressif IDF – TasksLink status: Unknown
Espressif IDF – GPIOsLink status: Unknown

Sources

IDF-RTOSLink status: OK

IDF-Timer ApiLink status: OK

DateChangeAuthor
15.10.2026Beispielcode als Code-Block eingefügt (Einbettung über gist-it.appspot.com funktionierte nicht mehr)Suffocation
04.10.2026Rechtschreibung korrigiert: Tippfehler, Kommas, GrammatikSuffocation
03.10.2026Log-Liste eingefügtSuffocation
07.01.2021Post createdSuffocation
Changelog

Leave a Reply

Your email address will not be published. Required fields are marked *