Ich versuche gerade mit dem oben genannten Controller ein wenig warm zu
werden. Meine ersten Testprogramme die LED's blinken lassen oder per
Interrupt auf die USART Schnittstelle zu greifen habe ich alle mit der
HSI Taktquelle und 8MHz realisiert.
Nun wollte ich mich im nächsten Schritt darum kümmern, den Controller
auf die maximale Frequenz von 48MHz zu takten. Und genau in diesem
Themengebiet sehe ich den Wald vor lauter Bäumen nicht mehr.
Mit dem folgenden Codeschnippsel bekomme ich den Controller erfolgreich
auf 24 MHz getaktet.
1 | RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_6);
|
2 | RCC_PLLCmd(ENABLE);
|
3 | while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {}
|
4 | RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
|
Nach viel lesen und Suchen glaube ich verstanden zu haben, dass man
nicht einfach den Multiplikator auf 12 stellen kann. Erst müsste die
Flash Latency gesetzt werden, damit diese mit Taktfrequenzen größer 24
MHz zurecht kommt. Das habe ich auch mit dem folgenden Code versucht.
1 | FLASH->ACR |= FLASH_ACR_PRFTBE;
|
2 | FLASH->ACR |= FLASH_ACR_LATENCY;
|
3 | RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_12);
|
4 | RCC_PLLCmd(ENABLE);
|
5 | while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {}
|
6 | RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
|
Die beiden Codeschnipsel stehen jeweils am Anfang der main Routine.
Wenn ich den zweiten Code ausprobiere scheint der Controller nicht
richtig anzulaufen, er bleibt einfach tot. Füge ich die Codezeile
1 | GPIO_SetBits(GPIOA,GPIO_Pin_2);
|
vor die while schleife an, Läuft der Kontroller auch mit dem zweiten
Codeschnipsel an, liefert aber nach einiger weile Mist per UART aus.
Verschiedene Bautraten habe ich ausprobiert aber ohne Erfolg, und es
kann ja auch nicht Ziel sein vorher einen Ausgang mit LED zu schalten
damit alles läuft.
Verwenden tue ich die Coocox CoIDE 1.7.6.
Gibt es irgendwo ein venüftiges Tutorial oder Auflistung wie man mit der
internen Taktquelle zuverlässig auf 48MHz kommt? Mein bisheriges
Querlesen vom Datenblatt und dem Reference Manual führten nicht zum
Erfolg.
Gruß,
Markus