{"id":7139,"date":"2021-01-07T19:18:43","date_gmt":"2021-01-07T19:18:43","guid":{"rendered":"https:\/\/www.fambach.net\/?p=7139"},"modified":"2026-10-15T23:31:09","modified_gmt":"2026-10-15T23:31:09","slug":"espressif-idf-timer","status":"publish","type":"post","link":"https:\/\/www.fambach.net\/en\/espressif-idf-timer\/","title":{"rendered":"Espressif IDF \u2013 Timer"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_89 ez-toc-wrap-left counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Contents\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewbox=\"0 0 24 24\" version=\"1.2\" baseprofile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/#Fazit\" >Conclusion<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/#Verwandte_Beitrage\" >Related Posts<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/#Quellen\" >Sources<\/a><\/li><\/ul><\/nav><\/div>\n\n<p class=\"wp-block-paragraph\">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\u00e4chsten Kapitel, um das Blinken k\u00fcmmern 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\u00f6glichen Funktionsaufrufe zu terminieren. Es gibt zwei Optionen: periodisch und einmalig. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Was ben\u00f6tigt man f\u00fcr einen IDF Timer?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eine Funktion, welche die folgende Signatur haben muss:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>static void timer_callback(void* arg){\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Die Timerargumente, welche einen Pointer auf die Timerfunktion (s.o.) und einen frei w\u00e4hlbaren Namen enthalten.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> const esp_timer_create_args_t periodic_timer_args = {\n                        \/* Pointer auf die Funktion *\/\n                        .callback = &amp;timer_callback,\n                        \/* Der name ist optional*\/\n                        .name = \"periodic\"\n    };<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jetzt noch den Timer erstellen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>esp_timer_handle_t periodic_timer;\nESP_ERROR_CHECK(\n  esp_timer_create(&amp;periodic_timer_args, &amp;periodic_timer)\n);  <\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dann noch entscheiden, ob dieser periodisch oder nur einmal gestartet werden soll. Der zweite Parameter ist die Ausl\u00f6sezeit in Mikrosekunden (Millisekunden * 1000)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/** periodisch\nESP_ERROR_CHECK(\n  esp_timer_start_periodic(periodic_timer, 5000000)\n);\n        \n\/\/** Nur einmal\nESP_ERROR_CHECK(\n  esp_timer_start_single(periodic_timer, 5000000)\n);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Im Beispiel wird die periodische Ausgabe des Textes aus der \u00dcbung 1 alle 5 Sekunden realisiert.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Source code <code>main.c<\/code> (<span class=\"ub-content-link ub-content-link--ok ub-content-link--status-after\"><a href=\"https:\/\/github.com\/sfambach\/espressif-idf\/tree\/master\/L4_Timed_Output\/main\" class=\"ub-content-link__anchor\">GitHub<\/a><span class=\"ub-status ub-status--ok\" title=\"Link status: OK\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: OK<\/span><\/span><\/span>)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">\/** idf example\n *\n * Timed hello world example with output every 5 seconds on the console\n *\n * Some parts are copied from the official idf examples found on \n * https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/\n * \n * Modified by SteFam @ http:\/\/www.fambach.net\n *\n * GPLv3 \n * Blah blah blah, free to use. \n * I invested some time and mony in those examples if you want to delete this header \n * please do not forget to mention at least my website, thanks!\n*\/\n\n\n#include &lt;stdio.h&gt;\n#include \"freertos\/FreeRTOS.h\"\n#include \"freertos\/task.h\"\n\n\/\/ method declaration for timer callbacks\nstatic void timer_callback(void* arg);\n\nvoid app_main(void)\n{\n\t\/\/* setup timer\n\t\n\t\/\/** create arguments for timer task\n\tconst esp_timer_create_args_t periodic_timer_args = {\n\t\t\t\/* name of the callback function defined before *\/\n\t\t\t.callback = &amp;timer_callback,\n\t\t\t\/* name is optional, but may help identify the timer when debugging *\/\n\t\t\t.name = \"periodic\"\n    };\n\t\n\t\/\/** create time itself\n\tesp_timer_handle_t periodic_timer;\n\tESP_ERROR_CHECK(esp_timer_create(&amp;periodic_timer_args, &amp;periodic_timer));\t\n\t\n\t\/\/** start the timer periodic\n\tESP_ERROR_CHECK(esp_timer_start_periodic(periodic_timer, 5000000));\n\t\n\t\/\/** for a single shot do this\n\t\/\/ ESP_ERROR_CHECK(esp_timer_start_single(periodic_timer, 5000000));\n\t\n}\n\n\nstatic void timer_callback(void* arg)\n{\n    \/\/ single console output \n\tprintf(\"www.fambach.net\\n\");\n}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"428\" height=\"163\" src=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-02-16_23_31.jpg\" alt=\"\" class=\"wp-image-6950\" srcset=\"https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-02-16_23_31.jpg 428w, https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-02-16_23_31-300x114.jpg 300w, https:\/\/www.fambach.net\/wp-content\/uploads\/2021-01-02-16_23_31-18x7.jpg 18w\" sizes=\"auto, (max-width: 599px) calc(100vw - 50px), (max-width: 767px) calc(100vw - 70px), (max-width: 991px) 429px, (max-width: 1199px) 637px, 354px\"><figcaption>Konsolenausgabe \u2013 Alle 5 Sekunden wird die Ausgabe ausgel\u00f6st.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"fazit\"><span class=\"ez-toc-section\" id=\"Fazit\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Es gibt noch viele weitere Optionen in der IDF, um Timer zu nutzen. Hier habe ich nur die Oberfl\u00e4che der Thematik angekratzt. F\u00fcr weitere Informationen sei deshalb auf die IDF Dokumentation verwiesen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"verwandte-beitraege\"><span class=\"ez-toc-section\" id=\"Verwandte_Beitrage\"><\/span>Related Posts<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><span class=\"ub-content-link ub-content-link--broken ub-content-link--status-after is-broken\"><a href=\"https:\/\/www.fambach.net\/en\/?p=6943\" class=\"ub-content-link__anchor\" title=\"This link appears to be broken.\">Main contribution<\/a><span class=\"ub-status ub-status--broken\" title=\"Link status: Broken\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: Broken<\/span><\/span><\/span><\/p>\n\n\n<div class=\"display-posts-listing\"><div class=\"listing-item\"><span class=\"ub-content-link ub-content-link--unknown ub-content-link--status-after\"><a class=\"title ub-content-link__anchor\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-projekt-erstellen\/\">Espressif IDF \u2013 Projekt erstellen<\/a><span class=\"ub-status ub-status--unknown\" title=\"Link status: Unknown\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: Unknown<\/span><\/span><\/span><\/div><div class=\"listing-item\"><span class=\"ub-content-link ub-content-link--unknown ub-content-link--status-after\"><a class=\"title ub-content-link__anchor\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-konsolenausgabe\/\">Espressif IDF \u2013 Konsolenausgabe<\/a><span class=\"ub-status ub-status--unknown\" title=\"Link status: Unknown\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: Unknown<\/span><\/span><\/span><\/div><div class=\"listing-item\"><span class=\"ub-content-link ub-content-link--unknown ub-content-link--status-after\"><a class=\"title ub-content-link__anchor\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-fehlerbehandlung\/\">Espressif IDF \u2013 Fehlerbehandlung<\/a><span class=\"ub-status ub-status--unknown\" title=\"Link status: Unknown\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: Unknown<\/span><\/span><\/span><\/div><div class=\"listing-item\"><span class=\"ub-content-link ub-content-link--unknown ub-content-link--status-after\"><a class=\"title ub-content-link__anchor\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-log-nachrichten\/\">Espressif IDF \u2013 Lognachrichten<\/a><span class=\"ub-status ub-status--unknown\" title=\"Link status: Unknown\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: Unknown<\/span><\/span><\/span><\/div><div class=\"listing-item\"><span class=\"ub-content-link ub-content-link--unknown ub-content-link--status-after\"><a class=\"title ub-content-link__anchor\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-timer\/\">Espressif IDF \u2013 Timer<\/a><span class=\"ub-status ub-status--unknown\" title=\"Link status: Unknown\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: Unknown<\/span><\/span><\/span><\/div><div class=\"listing-item\"><span class=\"ub-content-link ub-content-link--unknown ub-content-link--status-after\"><a class=\"title ub-content-link__anchor\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-menuconfig\/\">Espressif IDF \u2013 Menuconfig<\/a><span class=\"ub-status ub-status--unknown\" title=\"Link status: Unknown\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: Unknown<\/span><\/span><\/span><\/div><div class=\"listing-item\"><span class=\"ub-content-link ub-content-link--unknown ub-content-link--status-after\"><a class=\"title ub-content-link__anchor\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks\/\">Espressif IDF \u2013 Tasks<\/a><span class=\"ub-status ub-status--unknown\" title=\"Link status: Unknown\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: Unknown<\/span><\/span><\/span><\/div><div class=\"listing-item\"><span class=\"ub-content-link ub-content-link--unknown ub-content-link--status-after\"><a class=\"title ub-content-link__anchor\" href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/\">Espressif IDF \u2013 GPIOs<\/a><span class=\"ub-status ub-status--unknown\" title=\"Link status: Unknown\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: Unknown<\/span><\/span><\/span><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"quellen\"><span class=\"ez-toc-section\" id=\"Quellen\"><\/span>Sources<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><span class=\"ub-content-link ub-content-link--ok ub-content-link--status-after\"><a href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/api-reference\/system\/freertos.html#\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ub-content-link__anchor\">IDF-RTOS<\/a><span class=\"ub-status ub-status--ok\" title=\"Link status: OK\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: OK<\/span><\/span><\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span class=\"ub-content-link ub-content-link--ok ub-content-link--status-after\"><a rel=\"noreferrer noopener\" href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/api-reference\/system\/freertos.html#timer-api\" target=\"_blank\" class=\"ub-content-link__anchor\">IDF-Timer Api<\/a><span class=\"ub-status ub-status--ok\" title=\"Link status: OK\"><span class=\"ub-status__icon\" aria-hidden=\"true\">\u25cf<\/span><span class=\"screen-reader-text\">Link status: OK<\/span><\/span><\/span><\/p>","protected":false},"excerpt":{"rendered":"<p>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\u00e4chsten Kapitel, um das Blinken k\u00fcmmern wir uns hier. Auch in der Arduino Umgebung wird immer geraten, Codeunterbrechungen mit Delay zu vermeiden. Dort gibt es einige Konstrukte mit &#8230;<\/p>\n<a href=\"https:\/\/www.fambach.net\/en\/espressif-idf-tasks-2\/\" class=\"read-more-link\">Carry on reading <span class=\"screen-reader-text\">\"Espressif IDF &#8211; GPIOs\"<\/span> <span class=\"meta-nav\">\u2192<\/span><\/a>","protected":false},"author":1,"featured_media":7149,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"no","_lmt_disable":"no","footnotes":""},"categories":[188,472,473,496],"tags":[497,148,499,465,474,492,476,500,491],"class_list":["post-7139","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-esp-32","category-esp32-s2","category-espressif-idf","category-how-to","tag-c-2","tag-esp32","tag-esp32s2","tag-espressif","tag-espressif-idf","tag-howto","tag-idf","tag-shulung","tag-tutorial","penguin-post","penguin-post-not-sticky"],"modified_by":"sfambach","_links":{"self":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/7139","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/comments?post=7139"}],"version-history":[{"count":11,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/7139\/revisions"}],"predecessor-version":[{"id":19682,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/posts\/7139\/revisions\/19682"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/media\/7149"}],"wp:attachment":[{"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/media?parent=7139"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/categories?post=7139"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fambach.net\/en\/wp-json\/wp\/v2\/tags?post=7139"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}