Forum: Mikrocontroller und Digitale Elektronik STM32 Quarzfrequenz in Firmware bestimmen


von Pepe (Gast)


Lesenswert?

Hallo.
Mir liegt eine Schaltung mit einem STM32F405 vor, die - im Laufe der 
Zeit - zwei verschiedene Quarze verwendet hat. (8MHz & 25MHz)

Die bisherige Firmware wird in 2 Varianten compiliert. Einziger 
Unterschied die Einstellungen zur PLL. Ich würde jetzt gern die Frequenz 
der Quarzes automatisch beim Firmwarestart ermitteln und einfach die 
passenden Settings verwenden.

Wie stellt man dies am einfachsten an?

Vielen Dank schon mal.
Pepe.

von holger (Gast)


Lesenswert?

>Wie stellt man dies am einfachsten an?

Papp nen 32kHz Quarz an die RTC, schreib eine passende
Software und messe damit deine Quarzfrequenz.

von Pepe (Gast)


Lesenswert?

Hardwareänderungen sind leider nicht drin. Die PCB wird schon seit 
einiger Zeit ausgeliefert...

von Gerd E. (robberknight)


Lesenswert?

Der Controller startet sowieso immer mit HSI, also dem internen 16MHz 
RC-Oszillator. Von da aus kannst Du den HSE, also Deine 8 oder 25 MHz 
Quarze aktivieren und mit einem Timer von der Frequenz vermessen. Je 
nach Messwert die eine oder andere PLL-Einstellung verwenden.

Der HSI ist nicht so genau und schwankt mit der Temperatur, also etwas 
Toleranz bei den Schwellwerten vorsehen.

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Im Referenzmanual laesst sich ein Kapitel 6.2.11 "Internal/external 
clock measurement using TIM5/TIM11" finden.

von A. S. (Gast)


Lesenswert?

Bei Deinem Controller geht es ja anscheinend einfach. Ganz allgemein: 
falls er einen unabhängigen Watchdog hat, kannst Du die Zeit bis zu eben 
jenem auslösen messen (natürlich in RAM, das nicht vom Startup gelöscht 
wird). Gleiches ist prinzipiell mit praktisch jeder RC-Schaltung 
möglich, die sich irgendo mit eng tolleriertem C und 
Lade/Rücklesemöglichkeit befindet. RTCCs gehen natürlich immer, auch 
eingehende Signale aller Art, z.B. am UART oder Antwortzeiten. Selbst 
Speicher-Löschzeiten können derartige Unterschiede zur Not erkennen 
lassen, (auch wenn sich darauf wohl niemand wirklich verlassen möchte).

von Pepe (Gast)


Lesenswert?

@Gerd:
So hatte ich mir das auch vorgestellt.
Mir war nur nicht bewusst, dass HSI & HSE gleichzeitig laufen können...

Noch eine Verständnisfrage:

Mit RCC_HSEConfig(RCC_HSE_ON) HSE aktivieren,
Evtl. PLL einstellen(falls nötig) und
Timer11 mit HSE_RTC takten (ist anscheinend der
einzigste Timer, der HSE "direkt" verwenden kann)

von Pepe (Gast)


Lesenswert?

Uwe B. schrieb:
> Internal/external
> clock measurement using TIM5/TIM11

Wer lesen kann ist klar im Vorteil.
Hab ich übersehen ;-)

von Kunz (Gast)


Lesenswert?

Das mit dem ausmessen der externen Frequenz mit dem HSI funktioniert. 
Hab ich selbst schon implementiert.

Eine Alternative wäre es eine Hardware Konfiguration zu speichern, in 
welcher die Software Relevanten Schaltungsänderungen hinterlegt sind.

Diese dürfte dann bei einem SW Update natürlich nicht überschrieben 
werden.

mfg

Hinz & Kunz

von Georg (Gast)


Lesenswert?

Kunz schrieb:
> Eine Alternative wäre es eine Hardware Konfiguration zu speichern

Das sollte man ja sowieso, ein Softwareupdate sollte ja nicht 
IP-Adressen, Seriennummer usw. überschreiben, sonst müsste man ja das 
Gerät nach jedem Update ganz neu in Betrieb nehmen. Die Hardwareversion 
wäre da nur ein zusätzlicher Eintrag.

Georg

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.