Samstag, 13. September 2014

Microseconds Delay for STM32

Lieber Entwickler,

alle STM32-Derivate bieten für Performance-Messungen einen Cycle-Counter. Nach Aktivierung zählt dieser mit jedem Taktzyklus einfach um Eins nach oben. Damit eignet er sich hervorragend für blockierende Delays im Mikrosekundenbereich. Vorteilhaft an dessen Verwendung ist:

  • Delays mit Timern verbrauchen eine wertvolle und mächtige Timer-Ressource für profanes Zählen
  • Delays mit dem Systick-Timer im Mikrosekundenbereich sorgn dafür, dass der Systick-Interrupt jede Mikrosekunde aufgerufen wird. So kommt der STM32 kaum noch zu seinen eigentlichen Aufgaben ;-)
  • Delays mit __NOP() und Schleifen sind ungenau, weil sie durch Interrupts unterbrochen werden können.
So ist die Verwendung des Cycle-Counters m.E. der absolut zu bevorzugende Weg.


Den Code sowie ein schönes Anwendungsbeispiel findet ihr in meinem SVN-Repository: https://stm32tutor.googlecode.com/svn/trunk/103dht22. Wesentlich dort sind die Dateien timing.c und timing.h. Beachtet, dass das Modul vor seiner erstmaligen Verwendung mit TIMING_Init(); initialisiert werden muss. Diese Routine schaltet intern lediglich den Performance-Couter frei und setzt ihn auf einen Startwert.

Happy Coding

Keine Kommentare:

Kommentar veröffentlichen