Berechnung des Timer-Ticks STM32F4

Ich versuche, den Timer (TIM4) zu verwenden, um steigende und fallende Flankenzeiten von einem externen Sensor zu protokollieren. Ich muss den Timer so einstellen, dass er alle 1 µs tickt und eine Periode von 40 ms hat (also 40.000 Ticks zählt, bevor er überläuft). TIM4 hat eine Quellentaktrate von 84 MHz. Das Datenblatt sagt:

"Programmierbarer 16-Bit-Vorteiler zum Teilen der Zählertaktfrequenz durch einen beliebigen Faktor zwischen 1 und 65536".

In den meisten Tutorials wird jedoch durch 84 - 1 geteilt, um 1 MHz zu erhalten. Kann jemand die genauen Formeln zur Berechnung der Parameter bereitstellen? Vielen Dank im Voraus

Welche "Formeln" willst du? - Beachten Sie, dass eine Division durch 0 keinen Sinn macht, daher ist es sinnvoll, 0 für 1, 1 für 2 und 65535 für 65536 zu verwenden.

Antworten (1)

Die Prescaler-Registerbeschreibung besagt, dass der Eingangstakt durch den Registerwert + 1 geteilt wird. Wenn Ihre Eingangsfrequenz also 84 MHz beträgt und Sie möchten, dass der Timer bei 1 MHz zählt, müssen Sie 84-1 programmieren, um das PSC-Register zu erhalten einen Teiler von 84 und damit einen Zählertakt von 1 MHz.

Auf den internen PSC-Zähler kann nicht zugegriffen werden, sodass die 16-Bit-Beschränkung nicht umgangen werden kann.

Programmieren Sie das ARR-Register mit 39999, der Überlauf tritt bei der nächsten (der 40000. Flanke) auf.

Hat das OP die Frage geändert? Die Antwort " ist ein 16-Bit-Timer, es ist unmöglich, ihn auf 4 Millionen zu zählen " macht keinen Sinn, also vielleicht löschen? Was bedeutet „Flanke“ im Zusammenhang mit „der 40000. Flanke“? Für mich bedeutet "Flanke" die Seite von etwas oder ein Stück Steak, das in Fajitas verwendet wird, lecker!
@gbulmer Ja, die Frage wurde bearbeitet, in der ursprünglichen Frage befanden sich 4 Millionen. Flank war ein falscher Freund - auf Deutsch heißt die Flanke eines Taktsignals "Flanke" (oder kann zumindest so genannt werden), ich habe Kopfschmerzen, daher leidet mein Englisch etwas. Danke für den Hinweis.