Forum: Mikrocontroller und Digitale Elektronik STM32F407 - kann man aktuelle SYSCLK irgendwo auslesen?


von Christoph K. (chriskuku)


Lesenswert?

Kann ich in einem Programm die aktuelle SYSCLK (z.B. 168MHz) als Wert 
auslesen oder gibt es eine andere Möglichkeit, sie zu verifizieren, ohne 
jetzt das Scope oder den Frequenzmesser zu holen?

: Bearbeitet durch User
von Walter T. (nicolas)


Lesenswert?

Da die MCU nicht wissen kann, welcher Quarz angeschlossen ist: Leider 
nein. Wenn's nur um Plausibilität geht, ist das Symbol SYSTEMCORECLOCK 
das, was Du suchst. Davon werden die Teiler abgeleitet.

: Bearbeitet durch User
von Moot S. (mootseeker)


Lesenswert?

Du kannst versuchen mit der HAL_GetTick Funktion die Zeit zu messen, 
z.B. von einer Berechnung. So kannst du die Frequenz etwa ermitteln.

von Christoph K. (chriskuku)


Lesenswert?

Walter T. schrieb:
> Da die MCU nicht wissen kann, welcher Quarz angeschlossen ist: Leider
> nein. Wenn's nur um Plausibilität geht, ist das Symbol SYSTEMCORECLOCK
> das, was Du suchst. Davon werden die Teiler abgeleitet.

OK. Dazu brauche ich aber einen C-Layer. Mein Programm ist in Assembler 
geschrieben. Gut, ich weiß letztlich, was programmiert wurde und könnte 
das jetzt auch Schritt für Schritt nachgucken. Andererseits könnte ich 
eine Baudrate unter den Annahmen programmieren und schauen, ob das 
richtige Zeichen ankommt.

Nur ist es ja gerade Letzteres, was nicht funktioniert (USART3) :)
Gut, war nur so ein Gedanke.

: Bearbeitet durch User
von Löppt (Gast)


Lesenswert?

Wenn ich dich richtig verstehe, könntest du die interne RTC über den LSI 
clocken und das Frequenzverhältnis aus einem TIM und der RTC berechnen?
Habe das aber noch nicht ausprobiert.

Walter T. schrieb:
> Da die MCU nicht wissen kann, welcher Quarz angeschlossen ist:

Warum sollte sie das nicht können? Die meisten Mikrocontroller haben ja 
interne Taktquellen, die man als Referenz benutzen könnte.

von m.n. (Gast)


Lesenswert?

Walter T. schrieb:
> ist das Symbol SYSTEMCORECLOCK

Es wäre die Variable "SystemCoreClock", die er aber in seinem 
Ass-Programm nicht verwendet hat. Sein eigenes Programm kennt er wohl 
auch nicht.

Bei einem unbekannten Programm kann man per SWD die PLL-Register 
auslesen und abhängig von dem HSI/HSE-Takt die Taktfrequenz ausrechnen.

von W.S. (Gast)


Lesenswert?

Christoph K. schrieb:
> Kann ich in einem Programm die aktuelle SYSCLK (z.B. 168MHz) als Wert
> auslesen oder gibt es eine andere Möglichkeit, sie zu verifizieren, ohne
> jetzt das Scope oder den Frequenzmesser zu holen?

Prinzipiell: Nein.
Zum Messen, Verifizieren und so braucht man 2 Instanzen: Den Prüfling 
und eine Referenz. Was du hingegen vorhast, ist etwa so, wie weiland der 
Baron Münchhausen, der sich am eigenen Zopf aus dem Sumpf zog.

Bei einigen µC gibt es für irgend ein Pin die Funktion, wo man den Takt 
(CPU-Takt oder AHB-Takt je nach Plattform) draufleiten kann, 
heruntergeteilt oder ggf. nicht. Dort kann man dann mit dem 
Frequenzmesser messen. Mußt du einfach mal im Manual nachschauen.

W.S.

von Löppt (Gast)


Lesenswert?

W.S. schrieb:
> Prinzipiell: Nein.
> Zum Messen, Verifizieren und so braucht man 2 Instanzen: Den Prüfling
> und eine Referenz. Was du hingegen vorhast, ist etwa so, wie weiland der
> Baron Münchhausen, der sich am eigenen Zopf aus dem Sumpf zog.

Klingt zwar cool, aber eigentlich hat ein Microkontroller üblicherweise 
beides. Ist nur die Frage, ob man es entsprechend intern verschalten 
kann. Bei den ATSAM geht es afaik besser als bei den STM32F.

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.