Forum: Mikrocontroller und Digitale Elektronik STM32F4 Discoveryboard: Warum PLL aktiv startup


von Curby23523 N. (Gast)


Lesenswert?

Hallo,

beim Konfigurieren eines Timers, der im Sekundentakt eine LED blinken 
soll habe ich festgestellt, dass entgegen dem Handbuch bei mir eine 
andere Startkonfiguration der Clocks vorliegt. Der µC ist ein 
STZM32F407VGT6

Es ist die PLL aktiviert und auch HSE ist aktiviert. Die PLL ist als 
Systemclock zugewiesen. Im RCC->CFGR Register kann auch 0b10 abgelesen 
werden bei den Bits, die angeben welche Systemclock ausgewählt ist. 
[3:2]

Ich kann die Bits 0:1 in RCC->CFGR löschen und ich habe meine korrekte 
16MhZ HSI clk.

Warum ist das so? Es ist das STMF4 Discoveryboard, nur ein paar Zeilen 
code, direkt auf Registerebene. Habe ich etwas übersehen?

Ich lasse mir die Bitkonfigurationen auf der grünen und orangenen LED 
des Boards ausgeben.
1
int main(void)
2
{
3
4
  //RCC->CFGR &= ~0b11;                //HSI ausählen
5
  //while(((RCC->CFGR) & (0b11<<2)));          //warten bis bereit
6
7
  RCC->AHB1ENR |= (1<<3);                //GPIOD CLK
8
9
  GPIOD->MODER |= (0b01 << 2*12);            //LEDs Discoveryboard aktivieren (grün)
10
  GPIOD->MODER |= (0b01 << 2*13);            //LEDs Discoveryboard aktivieren (orange)
11
12
  //GPIOD->ODR |= (RCC->CFGR & (0b11 << 2)) << 10;  //Systemclock auswahl
13
  GPIOD->ODR |= (RCC->CR & (1<<24)) >> 12;      //PLL aktiv?
14
15
  while(1);
16
}

von Jim M. (turboj)


Lesenswert?

Nils H. schrieb:
> Habe ich etwas übersehen?

Ja, die haben IIRC noch irgendwo eine SystemInit() Funktion die vor 
main() ausgeführt wird und z.B. Clocks aufsetzt.

von STM Apprentice (Gast)


Lesenswert?

Jim M. schrieb:
> Ja, die haben IIRC noch irgendwo eine SystemInit() Funktion die vor
> main() ausgeführt wird und z.B. Clocks aufsetzt.

Richtig. Ich habe gezögert das zu benennen da es vermutlich
von der IDE (die einem evtl etwas vorkonfiguriert) abhängt
wie der Startup Code ausgelegt ist, ob die SystemInit() Funktion
bereits im Reset-Handler vor der main() aufgerufen wird.

von Curby23523 N. (Gast)


Lesenswert?

Ich benutze die STM32 Workbench IDE. Dort muss ich ein Board auswählen 
und habe einfach mein eigenes erstellt.

von STM Apprentice (Gast)


Lesenswert?

Schau dir mal dein Projekt an. Dort wird vermutlich
irgendwo <startup_stm32f4xx.S> eingebunden sein.
Darin findet sich der <Reset_Handler:> der nach ein
paar Zeilen zum Aufruf von <SystemInit()> in der Datei
system_stm32f4xx.c in der bereits Clocks und anderes
gesetzt wird.

von Curby23523 N. (Gast)


Lesenswert?

Danke, ja! Nach dem löschen der entsprechenden Zeilen in 
"system_stm32f4xx.c" verhält es sich wie im Datasheet beschrieben!

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.