Forum: Mikrocontroller und Digitale Elektronik SysTick STM32


von MArkus (Gast)


Lesenswert?

Hi

Ich wollte ein Laufzeitmessung in meine Applikation einzubauen. Anfangs 
wollte ich den Timer 1 dazu verwenden. Hab mir aber dann gedacht es 
vielleicht mit dem SysTick besser funkt.

Meine Frage ist ob der SysTick nur als Timer verwendet werden kann, der 
jede ms einen interrupt auslöst oder kann man auch eine "variable" Zeit 
messen?

Also kann man den Systick speichern und dann nach ca. 15 ms von dem 
aktuellen Tick den gespeicherten abziehen das man die Zeit verstriche 
Zeit rausbekommt??

Lg
Markus

von Rene B. (themason) Benutzerseite


Lesenswert?

Also soweit ich weiß lässt sich der SysTick Timer variabel einstellen.
Frag mich aber gerad nicht wo welches Register womit zu beschreiben ist.
Aber prinzipiell müsste das gehen.

von (prx) A. K. (prx)


Lesenswert?

MArkus schrieb:

> Also kann man den Systick speichern und dann nach ca. 15 ms von dem
> aktuellen Tick den gespeicherten abziehen das man die Zeit verstriche
> Zeit rausbekommt??

Klar doch. Aber Obacht, der ist keine 32 Bits breit.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Den Systick einfach laufen lassen.
- Zu Beginn Wert auslesen.
- Am Ende zweiten Wert lesen.

Wert Ende - Wert Beginn = Takte dazwischen

von (prx) A. K. (prx)


Lesenswert?

Markus Müller schrieb:

> Wert Ende - Wert Beginn = Takte dazwischen

Fast. Ich glaube der zählt rückwärts.

Und wenn du es umdrehst, dann wird die Laufzeit trotzdem ab und zu 
negativ sein, nämlich wenn auch bei nur kurzer Messzeit der Systick 
zwischendrin überläuft. Muss man also ggf. korrigieren (2**24 
draufaddieren).

von Arne (Gast)


Lesenswert?

Oder den Cycle Counter nehmen. Der ist m.W. 32bit breit. Liegt bei 
0xE0001004.

von MArkus (Gast)


Lesenswert?

> Klar doch. Aber Obacht, der ist keine 32 Bits breit.

Also ist es vielleicht doch besser einen Timer für die Aufgabe zu 
verwenden. Da kann man mit einem Interrupt feststellen ob der Timer 
schon überlaufen ist.

von (prx) A. K. (prx)


Lesenswert?

MArkus schrieb:

> Also ist es vielleicht doch besser einen Timer für die Aufgabe zu
> verwenden. Da kann man mit einem Interrupt feststellen ob der Timer
> schon überlaufen ist.

Kann man beim Systick auch. Nein, der Systick ist schon ok dafür. Man 
muss halt vorher das Limit kennen, d.h. wenn der unskaliert bei vollen 
72MHz läuft, dann ist dank der 24 Bits bei einer Viertelsekunde 
Anschlag.

von MArkus (Gast)


Lesenswert?

Ich weiß das ich mit
1
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
2
SysTick_Config(SystemCoreClock / 1000); // = 1ms
Den SysTick einstellen kann dass jede ms ein Interrupt geschickt wird. 
Wie ist denn die einstellung wenn ich einen überlaufinterrupt brauche? 
Und wie kann ich mir den Momentanwert von dem Counter ausgeben lassen??

Lg

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.