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
GB schrieb:> Auch mit dem> Handbuch und im Referenz-Manual des uC komme ich nicht weiter.
Auch nicht wenn du Kapitel "7.2.1 External source (HSE bypass)", S. 218,
im Reference Manual liest?
m.n. schrieb:> Laß das Programm so, wie es ist, und lege den ext. Takt an PH0.
Das ist aber falsch, es muss das Bypass-Bit gesetzt werden. Ich könnte
mir vorstellen dass da sonst die im STM32 integrierte
Oszillatorschaltung Schaden nehmen könnte (zu hohe Spannung).
Dr. Sommer schrieb:> Das ist aber falsch, es muss das Bypass-Bit gesetzt werden.
Ich sehe, Du bist "Softwerker" ;-)
Das ist nicht falsch, sondern ein gangbarer Weg, wenn man die paar µA
Stromaufnahme für den aktiven Inverter verkraften kann.
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!
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?
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ß
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.
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.
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.
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
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.
Sieht für mich wie der Teil aus bei dem der Controller resetet wird. Die
Register werden auf die Standardwerte gesetzt. Da guck man am besten in
RefMan. Wilde Benennungen halte ich in dem Falle nicht für nötig.
Der betreffende Code steht sicher woanders.