Guten Abend :) Folgendes Szenario (bin neu in der µC Welt :) ): Ein Timer setzt jedes mal, nachdem er seinen Maximalwert erreicht hat, x = x + 1. Gehe ich richtig der Annahme, dass der Timer während der Variablensetzung, oder auch weiterführendem Code, sofort im nächsten Takt, nachdem er seinen Maximalwert erreicht hat, wieder bei 0 anfängt (UpCounter)? Danke schonmal! Grüße Reggie
Gast
#4219264
Reginald L. schrieb: > Ein Timer setzt jedes mal, nachdem er seinen Maximalwert erreicht hat, x > = x + 1 warum sollte ein Timer das machen? Der Timer sagt lediglich irgendwann Bescheid des sein vorgegebener Zählwert erreicht ist. Was weiter passiert musst Du dann schon festlegen. Wenn Du möchtest daß eine Variable hoch oder runter gezählt wird musst Du das schreiben.
Du hast meine Frage leider nicht verstanden ;) Es geht darum, ob der Timer bei jedem Takt um einen Wert hochspringt, auch, wenn dazwischen Code ausgeführt wird und der Timer vom Maximalwert wieder auf 0 springt. Wäre ja eigentlich der Sinn eines Timers. Im Internet habe ich schon gegoogelt, aber genau diese konkrete Frage konnte ich mir nicht beantworten. Bin wie gesagt, neu auf dem Gebiet. Danke nochmal! EDIT: Wenn ich deinen Text nochmals durchlese, hab ich vielleicht deine Antwort nicht verstanden ;) Kann ich den Wert des Timers nicht abfragen?
Gast
#4219289
Der Timer ist Hardware und läuft unabhängig von der Software sobald er konfiguriert ist. Wenn man Überläufe zählen will kann man das natürlich in Software machen. Das interessiert aber den Timer nicht. Wie schnell der Timer läuft hängt btw. vom Prescaler ab.
Alles klar, tausend Dank und schönen Abend noch!
Eine Frage noch hinterhergeschmissen, weils so schön war :) Es geht um den 32bit Counter:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
Stimmt die Rechnung so? Kommt mir irgendwie "krass viel" vor. ST Manual, 32bit: max count 51.1s, min period 0.0119µs. Bezieht sich max count auf min period? Danke nochmals :)
Gast
#4219319
Welcher Busclock ist gemeint? Die Peripherals und Timer laufen nicht unbedingt im gleichen Takt. Schau dir den Clock tree an. 2^32 ist ja auch 'ne große Zahl. 0.0119µs ist gerundet die Periodendauer der genannten Einstellung von 84MHz. Der Timer läuft dann nach 2^32/84000000 Sekunden über, was 51.1s entspricht.
Mit Busclock ist der vom APB1 gemeint (Timer3). Da bin ich mir übrigens auch nicht sicher. Danke für den Tipp, hab ich ganz vergessen, da gibt's von ST doch das kleine Programm. Ah Ok, große Zahl, ist ja mega cool. So ein Timer ist genial, genau was ich brauche. Vielen lieben Dank nochmal!
Ich glaube jetzt hab ichs, für ein kurzes Feedback wäre ich dankbar. Auszug aus der system_stm32f4xx.c:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Wenn ich hier nach dem Tool von ST und dem geposteten Code gehe, heißt das, ich habe auf APB1 einen PreScaler von 4 drin, PCLK1 wie auf Bild 42MHz. Analog dazu APB2, PreScaler 2, PCLK2 84MHz. Soweit so klar. Aber was ist das für ein "X 2" auf dem Bild? Da steige ich noch nicht so ganz durch. Ist das der PreScaler vom Timer? Eher nicht, oder? Wo finde ich den im Code?
Reginald L. schrieb: > Aber > was ist das für ein "X 2" auf dem Bild? Da steige ich noch nicht so ganz > durch. Da ist eine Taktverdoppelung gemeint, siehst du ja im Textfeld daneben das die Zahl doppelt so Groß ist.
Gast
#4219525
>Aber was ist das für ein "X 2" auf dem Bild? ... >Ist das der PreScaler vom Timer? Eher nicht, oder? >Wo finde ich den im Code? Das ist einfach ein mal 2. Der Faktor zwischen Peripheral Clock und Timer Clock. Ob der Faktor 1 oder 2 ist hängt von der Einstellung des Prescalers direkt davor ab. (AFAIR x2 wenn der Prescaler teilt, 1 wenn der Prescaler 1:1 durchreicht). Die Timer haben dann jeweils zusätzlich ihre eignen Prescaler mit denen die APBx Timer Clocks 'runter geteilt werden können bevor sie in die eigentlichen Timer laufen.
Martin schrieb: >>Aber was ist das für ein "X 2" auf dem Bild? ... >>Ist das der PreScaler vom Timer? Eher nicht, oder? >>Wo finde ich den im Code? > > Das ist einfach ein mal 2. Der Faktor zwischen Peripheral Clock und > Timer Clock. Ob der Faktor 1 oder 2 ist hängt von der Einstellung des > Prescalers direkt davor ab. (AFAIR x2 wenn der Prescaler teilt, 1 wenn > der Prescaler 1:1 durchreicht). > > Die Timer haben dann jeweils zusätzlich ihre eignen Prescaler mit denen > die APBx Timer Clocks 'runter geteilt werden können bevor sie in die > eigentlichen Timer laufen. Gehört das hier dazu?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
Da steht aber nichts vom STM32F407. Jetzt bin ich total durcheinander. Ist gar nicht so einfach, mit den Dokumentationen von ST. Hat mein STM32F407VGT6 nun diesen Prescaler oder nicht? Nach STM32CubeMX ja, nach der SPL nein.
Der Prescaler ist fest, den kann man nicht ändern, deswegen wirst du ihn im Quellcode auch nicht finden.
Christian K. schrieb: > Der Prescaler ist fest, den kann man nicht ändern, deswegen wirst du ihn > im Quellcode auch nicht finden. Aaaah, OK, vielen Dank. Deshalb kann man den im Cube wohl auch nicht anklicken ;)
Ich meine den konstanten Faktor x2 am Ende des Clocktrees der zu den Timer geht. Jeder Timer hat noch einen eigenen Prescaler den du in deinem Code einstellen musst. Wenn du die HAL verwendest geht das so:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
In dem Beispiel hatte ich ein Timer clock von 84 MHz eingestellt. Der Timer hat einen Überlauf alle 8ms (125Hz)
Ja, das ist mir schon klar :) Ah, aber danke für den Hinweis mit der - 1, ich nehme an das ist wegen dem ersten Zählschritt "0"?
Jetzt muss ich den Thread hier doch noch ausgraben. Im Prozessordatenblatt steht, dass der schnellste Schritt des Timers 11.9ns dauert (TimerClock 84MHz). Setze ich den Prescaler jetzt auf 84-1, sollte er ja jede µs takten. Wo bleiben hier die 11.9ns, die er für jeden Takt braucht bei einem Prescaler von 1? Bzw. wo ist mein Fehler?
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
