Forum: Mikrocontroller und Digitale Elektronik CooCox STM32F4 Discovery SysClk einstellen


von Peter K. (peterka2000)


Lesenswert?

Ich habe mir jetzt nun endlich CoIde installiert. Wo muss ich 
einstellen, dass das Board auf vollen 168 MHz läuft? Ich hab schon bei 
der stm32f4xx.h
1
#if !defined  (HSE_VALUE) 
2
  #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
3
#endif /* HSE_VALUE */
1
#if !defined  (HSE_VALUE) 
2
  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
3
#endif /* HSE_VALUE */
 umgestellt. Läuft der jetzt schon auf 168 MHz oder wie?

von Beobachter (Gast)


Lesenswert?

Das Board hat LEDs. Du kannst ja einfach mal eine LED im 
Drei-Sekundentakt ein- und ausschalten und auf die Uhr schauen dann 
solltest du sehen ob er mit 168 MHz oder deutlich weniger wie bei der 
falschen Einstellung blinkt.

von Thomas W. (ratos)


Lesenswert?


von Peter K. (peterka2000)


Lesenswert?

Beobachter schrieb:
> Das Board hat LEDs. Du kannst ja einfach mal eine LED im
> Drei-Sekundentakt ein- und ausschalten und auf die Uhr schauen dann
> solltest du sehen ob er mit 168 MHz oder deutlich weniger wie bei der
> falschen Einstellung blinkt.
Und wie mach ich es am einfachsten ohne Timer?

von Beobachter (Gast)


Lesenswert?

1. Da du ja scheinbar in C programmieren willst, ist die 
Wahrscheinlichkeit hoch das eine delay_ms(xxxx); zur Verfügung steht.
2. Falls nicht, kann man auch "nop" Befehle in einer entsprechend 
angepassten Schleife ausführen. Siehe auch Assemblertutorial auf diesen 
Seiten.
3. Teste doch einfach den Timer nach ändern dieser Einstellung. 
Vielleicht läuft er ja schon korrekt.
4. .... der Kreativität sind keine Grenzen gesetzt .....

von Beobachter (Gast)


Lesenswert?

Übrigens gibt es auf den Seiten von ST auch eine Excel Datei mit der man 
sich die C-Datei mit gewünschten Einstellungen generieren lassen kann.

von Uwe B. (derexponent)


Lesenswert?

@Peter K,

-das File "system_stm32f4xx.c" muss auch noch angepasst werden
und im Main muss einmal diese Funktion aufgerufen werden
1
SystemInit();

um zu testen ob alles richtig (auf 168MHz) eingestellt ist,
kannst du das hier benutzen :
1
#include "stm32f4xx.h"
2
#include "stm32f4xx_rcc.h"
3
#include "stm32f4xx_conf.h"
4
5
6
//-------------------------------
7
// return wert  0 => alles ok
8
// return wert >0 => fehler
9
//-------------------------------
10
uint8_t test_Clock(void)
11
{
12
  uint8_t ret_wert=0;
13
  RCC_ClocksTypeDef RCC_Clocks;
14
  uint8_t clk_source;
15
  uint32_t clk_frq;
16
17
  // Clock-Quelle auslesen
18
  clk_source=RCC_GetSYSCLKSource();
19
  if(clk_source!=8) return(1); // Source steht nicht auf PLL
20
21
  // Clock-Frequenzen auslesen
22
  RCC_GetClocksFreq(&RCC_Clocks);
23
  clk_frq = RCC_Clocks.HCLK_Frequency; // muss 168MHz sein
24
  if(clk_frq!=168000000) return(2);
25
  clk_frq = RCC_Clocks.PCLK1_Frequency; // muss 42MHz sein
26
  if(clk_frq!=42000000) return(3);
27
  clk_frq = RCC_Clocks.PCLK2_Frequency; // muss 84MHz sein
28
  if(clk_frq!=84000000) return(4);
29
  clk_frq = RCC_Clocks.SYSCLK_Frequency; // muss 168MHz sein
30
  if(clk_frq!=168000000) return(5);
31
32
  return(ret_wert);
33
}

Gruss Uwe

von Jo D. (Firma: Jo) (discovery)


Lesenswert?

in der system_stm32f4xx.c muss eingetragen sein:
PLL_M = 8

in der stm32f4xx.h muss eingetragen sein:
HSE_VALUE = 8000000

in der Main Funktion muss gestartet werden (ganz am Anfang):
SystemInit();

von 6A66 (Gast)


Lesenswert?

BTW:

wir hatten mal einen STM32F103 der wurde falsch eingestellt und lief 
dann aus Versehen relativ stabil mit 128MHz - max nach Datenblatt ist 
72MHz.

rgds

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.