STM32 RCC PLL locked nicht

Gast #5798391
Lesenswert?

Moin,

mein Problem ist, dass meine PLL nicht mit meinem HSE einrasten möchte. 
Mein Code ist der folgende auf einem STM32F070CBT6:
1
/*##### RCC #####*/
2
  FLASH->ACR = 1;              //1 Waitstates
3
  RCC->CR |= RCC_CR_HSEON;        //Extenen Quarz an
4
  while(!(RCC->CR & RCC_CR_HSERDY));    //Auf Quarz warten
5
  //RCC->CFGR |= RCC_CFGR_PPRE_DIV4;
6
  RCC->CFGR2 = RCC_CFGR2_PREDIV_DIV2;    //Predivider = 2
7
  RCC->CFGR |= RCC_CFGR_PLLMUL12;      //PLL multiplizierer * 12 = 48MHz bei 8MHZ Eingang
8
  RCC->CFGR |= RCC_CFGR_PLLSRC;      //HSE als Source für PLL
9
  RCC->CR |= RCC_CR_PLLON;        //PLL an
10
  while(!(RCC->CR & RCC_CR_PLLRDY));    //Auf PLL warten
11
  RCC->CFGR |= RCC_CFGR_SW_PLL;      //PLL auswählen
12
  while(!(RCC->CFGR & RCC_CFGR_SWS_PLL));  //Auf PLL warten
13
  RCC->CR &= ~(RCC_CR_HSION);        //HSI aus

Wenn ich mit "RCC_CFGR_PLLSRC" auf HSE als taktquelle für die PLL 
umschalte bleibt die PLL bei "RCC_CR_PLLRDY" in einer Endlosschleife 
hängen. Verwende ich den internen Oszillator, indem ich 
"RCC_CFGR_PLLSRC" auskommentiere, locked die PLL (beides 8MHz).

In beiden Fällen kann ich mit dem Oszilloskop sehen, dass der externe 
Quarz bei 8MHz schwingt. Ebenso kann ich den HSE statt PLL als 
Taktquelle auswählen.

Was übersehe ich? PLL mit 8MHz HSi geht, mit 8MHz HSE (schwingt!) geht 
nicht.

Danke!

Ich habe 18pF Kondensatoren wie laut Quarz Datenblatt.
Gast #5798450
Lesenswert?

STMer schrieb:

>   RCC->CFGR |= RCC_CFGR_PLLSRC;      //HSE als Source für PLL

> Was übersehe ich? PLL mit 8MHz HSi geht, mit 8MHz HSE (schwingt!) geht
> nicht.

Also wenn die mit HSI geht, dann wird wohl HSI als Quelle für die PLL 
eingetragen sein. Wenn dem so ist, dann mußt Du bei der Quellen-Auswahl 
oben wohl nicht nur das Bit für HSE einschalten, sondern auch dafür 
sorgen, daß das für HSI ausgeschaltet ist.
Gast #5798455
Lesenswert?

Nop schrieb:
> Also wenn die mit HSI geht, dann wird wohl HSI als Quelle für die PLL
> eingetragen sein. Wenn dem so ist, dann mußt Du bei der Quellen-Auswahl
> oben wohl nicht nur das Bit für HSE einschalten, sondern auch dafür
> sorgen, daß das für HSI ausgeschaltet ist.

Wenn ich "RCC_CFGR_PLLSRC" nicht setze, ist HSI ausgewählt.

0 = HSI, 1 = HSE.
Gast #5798461
Lesenswert?

Dies ist mein Code für den STM32F070, externer Quarz 8 MHz, PLL 48MHz.
Funktioniert immer einwandfrei.
1
  //==== Starte externen Oszillator ====
2
  RCC->CR |= RCC_CR_HSEON;
3
  while(!(RCC->CR & RCC_CR_HSERDY));
4

5
  //==== PLL konfigurieren ====
6
  RCC->CFGR &= ~(RCC_CFGR_PLLMUL | RCC_CFGR_PLLSRC);
7
  RCC->CFGR |= (uint32_t)(RCC_PLLSource_HSE | RCC_PLLMul_6);
8
  
9
  //==== Enable PLL ====
10
  RCC->CR |= RCC_CR_PLLON;
11
  while(!(RCC->CR & RCC_CR_PLLRDY));
12

13
  //==== Configure Flash =====
14
  FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY;
15

16
  //==== Select PLL as system clock source ====
17
  RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
18
  RCC->CFGR |= RCC_SYSCLKSource_PLLCLK;
19
  while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_PLL);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren