STM32F407 mit CMOS anstatt Crystal OSC - Programmanpassung

Gast #5297906
Lesenswert?

Hallo zusammen,
ich habe da ein Problem bei dem ich etwas Hilfe benötige.
Und zwar habe ich eine Steuerungsplatine für eine Kamera die als uC 
einen STM32F407 verwendet. Als Referenztimer ist dort ein 
"konventioneller" Quarz  mit 8Mhz verbaut (Angeschlossen an OSC In und 
Out, sprich als HSE) mit entsprechendem Programmcode für den uC.
Nun gibt es eine neuere Version der Platine bei der anstatt eines 
Crystals OSC ein CMOS OSC (CO2520-8.000-33-50-X, ebenfalls 8Mhz als HSE) 
verwendet wird. Angenommen Hardwareseitig ist alles richtig, wovon ich 
momentan ausgehe. Was muss am Programm angepasst werden dass der uC mit 
dem CMOS läuft? Die Frequenz bleibt dabei identisch.

Im Inet finde ich leider nichts mehr was mir weiter hilft. Auch mit dem 
Handbuch und im Referenz-Manual des uC komme ich nicht weiter.

Über einen Hinweis würde ich mich sehr freuen!
Ich danke euch vielmals!

Gruß GB
Gast #5297978
Lesenswert?

m.n. schrieb:
> Das ist nicht falsch, sondern ein gangbarer Weg,

Nun gut, wenn man den Chip unbedingt außerhalb der Spezifikation 
betreiben will, wenn es doch so einfach wäre es richtig zu machen - 1 
Bit mehr zu setzen in einem Register, welches man sowieso beschreiben 
muss.

m.n. schrieb:
> Ich sehe, Du bist "Softwerker" ;-)
Tja, "Wieso, funktioniert doch" ist für mich kein Argument!
Gast #5298015
Lesenswert?

Ich verstehe einfach diese Haltung nicht, "Abkürzungen" zu nehmen, wenn 
es doch so einfach wäre, es richtig zu machen. Im Reference Manual heißt 
es, man soll den Bypass Mode nutzen. Der existiert ja auch nicht nur zum 
Spaß. Ohne genau zu wissen, wie der IC von innen aussieht, kann man 
nicht sagen wie er sich im nicht vom Hersteller vorgegebenen Betrieb 
verhält. Man kann bestimmt auch einige Abblockkondensatoren weglassen 
ohne dass der IC sofort ausfällt - aber ob das eine gute Idee ist?
Gast #5299133
Lesenswert?

Hallo,
danke für eure Beiträge!

Dr. Sommer schrieb:
> Auch nicht wenn du Kapitel "7.2.1 External source (HSE bypass)", S. 218,
> im Reference Manual liest?

Die Seiten bin ich schon durch gegangen, allerdings weiß ich nicht was 
ich  da einstellen sollte. Bin nicht vom Fach und habe nicht ein so tief 
gehendes Wissen was uC, bzw. was das anpassen von Registern angeht.


pegel schrieb:
> bin, hex oder sogar Quellcode?

Es ist der Quellcode geschrieben in C.

Danke Gruß
Gast #5299136
Lesenswert?

GB schrieb:
> Die Seiten bin ich schon durch gegangen, allerdings weiß ich nicht was
> ich  da einstellen sollte.

Steht doch genau da:

"You select this mode by setting the HSEBYP and HSEON bits in the RCC 
clock control register (RCC_CR)."

Finde die Stelle wo du "RCC->CR" setzt und passe sie entsprechend an.
Gast #5299232
Lesenswert?

Dr. Sommer schrieb:
> Im Reference Manual heißt
> es, man soll den Bypass Mode nutzen. Der existiert ja auch nicht nur zum
> Spaß.

Anders herum wird ein Schuh daraus: sobald man den Bypass-Modus 
einschaltet, muß man einen ext. Takt anlegen. Das steht im Datenblatt!
Der Hauptgrund, diesen Modus überhaupt zu verwenden, dürfte sein, PH1 
frei nutzen zu können.

@TO
Brauchst Du PH1 als freien IO-Pin? Wenn nein, dann lasse Dein Programm 
so wie es ist. Damit hast Du die Möglichkeit, einen Quarz oder einen 
externen XCO anzuschließen. Bei Bedarf kannst Du auch einen XCO mit 
gekappter, sinusförmiger Ausgangsspannung von ca. 1 Vss anschließen: 
kapazitiv über 1 nF einkoppeln.
Sich selber Knüppel zwischen die Beine zu werfen und für jeden 
Fliegenschiss ein separates Programm verwenden zu müssen, ist mehr als 
ungeschickt.
Und wenn man diese einfache Lösung wählt, geht weder der µC kaputt noch 
kommt man dafür in die Hölle.

Noch etwas: ich bin dazu übergegangen, im Startup-Code die ext. 
Quarzfrequenz im 1 MHz Raster zu messen und die PLL entsprechend zu 
konfigurieren. Dadurch gibt es nur ein einziges Programm, egal, ob nun 
gerade 8, 12, 16 MHz Quarze oder 10 bzw. 20 MHz XCOs bestückt werden.
Gast #5299355
Lesenswert?

GB schrieb:
> Es ist der Quellcode geschrieben in C.

Na dann kannst du jetzt entscheiden ob du alles so lassen willst, oder 
neu compilieren möchtest.
Im zweiten Fall, liste die Dateien auf, damit wir wissen welcher 
Compiler benötigt wird und welche Änderungen gemacht werden müssen.
Gast #5309681
Lesenswert?

Hallo zusammen,
sorry für meine längere Abwesenheit hatte viel um die Ohren und kam 
nicht dazu. Danke schon mal für eure Hilfe!

Ich habe nun die Stelle gefunden, weiß allerdings nicht wie ich das 
entsprechend anpassen muss damit HSEBYP und HSEON "aktiviert" sind. Hier 
mal der Ausschnitt des Codes:

 /* Set HSION bit */
  RCC->CR |= (uint32_t)0x00000001;

  /* Reset CFGR register */
  RCC->CFGR = 0x00000000;

  /* Reset HSEON, CSSON and PLLON bits */
  RCC->CR &= (uint32_t)0xFEF6FFFF;

  /* Reset PLLCFGR register */
  RCC->PLLCFGR = 0x24003010;

  /* Reset HSEBYP bit */
  RCC->CR &= (uint32_t)0xFFFBFFFF;

Ich danke euch!

Grüße
#5310046
Lesenswert?

GB schrieb:
> Hier
> mal der Ausschnitt des Codes:

Da hat sich jemand die Verwendung der #defines aus dem Header gespart, 
und nun hat man richtig Arbeit das nur korrekt zu lesen und zu ändern. 
Betrachte es als Strafarbeit.

Oder ist das automatisch generierter Code aus einem Tool? Die verwenden 
aber normalerweise trotzdem "sprechende" Bit #define.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren