Forum: Mikrocontroller und Digitale Elektronik STM32F4 Core Clock ändern


von Christian J. (Gast)


Lesenswert?

Hallo,

per Default wird der Core Clocj ja auf 180 Mhz Vollgas eingestellt. Nun 
komme ich aus der PIC Welt wo man die Frequenz nach Belieben mal eben 
ändern kann. Beim LPC23xx wurde daraus schon ein kleines Drama die 
Parameter zu berechnen jund beim M4 habe ich das Gefühl es wird ein 
Chaos.

Vorsichtige Frage: Ist es einfach möglich den Core Takt (SYSCLK) auf 
andere Werte einzustellen wo auch die Peripherels noch funktionieren? 
Betrieben wird die CPU durch einen 8Mhz Quarz. Würde reichen in 3-4 
Schritten bis 180 Mhz. Habe das Gefühl dass zig andere Takte auch davon 
abhängen und die Peripherie dann nicht mehr funktioniert, zb die Uart.

Das Core Tool von STM habe ich schon ausprobiert aber so richtig 
erschliesst sich mir nicht wie das zu benutzen ist.

Gruss,
Christian

von Dr. Sommer (Gast)


Lesenswert?

Ja das geht und ist detailliert im Reference Manual beschrieben. Bitte 
dort nachlesen (Kapitel "RCC"). Das STM32CubeMX Tool hilft beim 
Berechnen der Vorteiler/Multiplikatoren etc.

von Bernd K. (prof7bit)


Lesenswert?

Such mal nach der Funktion in der das RCC->PLLCFGR Register und einige 
andere damit zusammenhängende Register initialisiert werden.

Das was diese Funktion tut (in allen Einzelheiten und unter 
Zuhilfenahme des Reference Manuals [ja, das dauert ein paar Stunden, 
aber danach bist Du schlauer]) wird Dir zur Macht verhelfen die 
Taktfrequenzen nach Herzenslust (im Rahmen der Möglichkeiten) 
einzustellen.

: Bearbeitet durch User
von Christian J. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

danke für die Info. Ich sehe ohne viel Lesen geht es hier wohl nicht. 
Allerdings habe ich das beim LPC2368 auch selbst zusammen gekriegt ohne 
Vorlagen und es lief sogar hinterher. Schätze nur hier wird es einiges 
aufwendiger die gangschaltung ins Projekt einzubauen :-( Möchte nämlich 
den Idle Mode stromsprend haben und nur bei Sprung ins Programm soll er 
Vollgas geben.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Beim STM3232F4:

Die PLL hat Clock-Quellen, die man aus wählt.
z.B. die HSE = Hi Speed External, also der Quarz.

Dann gibt es ein Mutiplikationsregister und ein Divisonsregister.
Den Quarz multipliziert man auf 200..422 MHz.
Anschließend dividiert man die auf max 180 MHz wieder runter.

Die PLL muss aktiviert werden und dann schaltet man die PLL für den 
Betrieb mit der CPU um, also von der internen HSI Clock Quelle auf die 
PLL.

Anhand der Statusregister sieht man ob die PLL korrekt läuft und man 
umschalten darf.

Das ganze steht in wenigen Registern der RCC Einheit drin.

Das ganze steht auch in der Datei "system_stm32f4xx.c" der ST Library.

So der Ablauf.

PS: Das CubeMX Tool errechnet zum Teil falsche (zu große) zwischenwerte 
nach der Multiplikation! Es kamen mal 800MHz raus und der Kollege 
wunderte sich warum sein Chip nicht richtig lief.

Hier im Artikel kann dies auch nachgelesen werden:
http://www.mikrocontroller.net/articles/STM32_CooCox_Installation#Clock_auf_168MHz_einstellen

: Bearbeitet durch User
von Christian J. (Gast)


Lesenswert?

Hi Markus,

danke, ich kriege grad einen Schreck bei meinem 429 Disco Board, dort 
steht in der stm32fxx.h ein weert von 25 Mhz fuer den Quarz, verbaut ist 
aber ein 8 Mhz. Und es läuft. Muss ich den jetzt ändern? Ich weiss 
leider nicht wie ich die Global Defintionen abfragen kann in der IDE 
welche alle definiert sind.

Mit #error sehe ich dass beide ausgeführt werden, also HSE Value 
letzlich auf 16 Mhz steht. Seltsam. Ich habe die Version 1.4.0 von 2014.

Blöderweise weiss ich nicht wie ich HSE_VALUE bei EmBlocks global 
definieren kann, unter Compiler Defines klappt es nicht. Dann kommt ein 
Fehler.

/**
 * @brief In the following line adjust the value of External High Speed 
oscillator (HSE)
   used in your application

   Tip: To avoid modifying this file each time you need to use different 
HSE, you
        can define the HSE value in your toolchain compiler 
preprocessor.
  */

#if !defined  (HSE_VALUE)
  #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External 
oscillator in Hz */

#endif /* HSE_VALUE */

/**
 * @brief In the following line adjust the External High Speed 
oscillator (HSE) Startup
   Timeout value
   */
#if !defined  (HSE_STARTUP_TIMEOUT)
  #define HSE_STARTUP_TIMEOUT    ((uint16_t)0x05000)   /*!< Time out for 
HSE start up */
#endif /* HSE_STARTUP_TIMEOUT */

#if !defined  (HSI_VALUE)
  #define HSI_VALUE    ((uint32_t)16000000) /*!< Value of the Internal 
oscillator in Hz*/
#endif /* HSI_VALUE */

von m.n. (Gast)


Lesenswert?

Christian J. schrieb:
> Blöderweise weiss ich nicht wie ich HSE_VALUE bei EmBlocks global
> definieren kann, unter Compiler Defines klappt es nicht. Dann kommt ein
> Fehler.

Project/Build Options/Compiler Settings/#defines
HSE_VALUE=8000000
eingeben. Das klappt nicht? Schneller ist "ALT+F7"

von Christian J. (Gast)


Lesenswert?

m.n. schrieb:
> Project/Build Options/Compiler Settings/#defines
> HSE_VALUE=8000000
> eingeben. Das klappt nicht? Schneller ist "ALT+F7"

Doch..... wenn ich das = Zeichen enfüge geht es :-)
Trotzdem muss auch stm32fxx.h modifiziert werden da dort PLL_M
immer noch auf 25 steht und nicht auf 8. Tja, seitddem läuft er 
schneller, ca doppelt so schnell würde ich sagen. War vorher falsch 
eingestellt.

Aber Led Blinken erzeugt mir jetzt auch Helligkeitsunterschiede im LCD, 
da der Spritverbrauch ja auch höher ist.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Christian J. schrieb:
> Aber Led Blinken erzeugt mir jetzt auch Helligkeitsunterschiede im LCD,
> da der Spritverbrauch ja auch höher ist.

Schuld daran ist die Schottky Diode D3, die die Versorgung aus dem 
eigentlichen 3,3V Regler U1 um weitere 0,2-0,3V zusammenbrechen lässt. 
Wenn du den externen 3V Eingang nicht benutzt (also 5V über USB oder 
Pfostenleiste einspeist), ist es problemlos möglich, die Diode zu 
überbrücken. Dann werden alle Bausteine mit den richtigen 3,3V gespeist, 
und das Bild des TFT ist wesentlich heller und schöner. Ausserdem ist 
die Versorgung nicht mehr so mit Spikes belastet.

von Christian J. (Gast)


Lesenswert?

Matthias Sch. schrieb:

> Schuld daran ist die Schottky Diode D3,

Leute, was ihr nicht alles wisst :-) Ich werf dann mal den Lötkolben 
an....

edit: Wieso BF 0603 wenn auch 0402 geht? Grrrr. Padvon D3
abgelöst, mit 0,1mm Draht gerettet.  Aber das Flackern ist
wenigstens weg und es ist heller.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Christian J. schrieb:
>> Schuld daran ist die Schottky Diode D3,
>
> Leute, was ihr nicht alles wisst :-) Ich werf dann mal den Lötkolben
> an....

Das ist kein grosses Geheimnis. Drauf gekommen bin ich, nachdem ich das 
Mini-Oszi von Uwe B. auf die Kiste geflasht hatte und enorme Störungen 
aufm Schirm hatte. Das Oszi hat mir dann von der unruhigen 
Betriebsspannung berichtet.
Alle Bausteine kommen gut mit 3,3V zurecht, ist also kein Grund zur 
Sorge.
Noch ein Hinweis zur Core Clock, falls du mal mit Digitalaudio (I2S) zu 
tun hast. Die normalen Konfigurationen stellen die I2S PLL auf 1 MHz, 
empfohlen werden aber von ST 2MHz. Das betrifft allerdings eher den 
Disco F407 als den F429, auf dem ja nicht so viel Audiozeugs ist.

: Bearbeitet durch User
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.