STM32F407 + DP83848 PHY + MCO1 Clock

Gast #3676550
Lesenswert?
• ▲
▼
Ich habe ein Board designed, mit dem STM32F407 und einer DP83848 Phy. 
Beide ICs sind via RMII miteinander verbunden. Am PHY Chip selbst ist 
kein Oszillator dran, weil ich MCO vom uC verwenden wollte (hatte eine 
ähnliche Geschichte mit einem STM32F107). Beim STM32F107 konnte man MCO 
mit 50 MHz folgendermaßen laufen lassen:
1
GPIO_ETH_MediaInterfaceConfig(GPIO_ETH_MediaInterface_RMII);
2

3
  /* Set PLL3 clock output to 50MHz (25MHz/5)) */
4
  RCC_PLL3Config(RCC_PLL3Mul_10);
5
  /* Enable PLL3 */
6
  RCC_PLL3Cmd(ENABLE);
7
  /* Wait till PLL3 is ready */
8
  while (RCC_GetFlagStatus(RCC_FLAG_PLL3RDY) == RESET)
9
  {}
10
  /* Get PLL3 clock on PA8 pin (MCO) */
11
  RCC_MCOConfig(RCC_MCO_PLL3CLK);

Beim STM32F407 habe ich folgendes Probiert:
1
  RCC_PLLConfig(RCC_PLLSource_HSE, 25,300,2,7);
2
  // Enable PLL
3
  RCC_PLLCmd(ENABLE);
4
  // Wait till PLL is ready
5
  while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {}
6

7
  // HSE clock selected to output on MCO pin(PA8)
8
  //RCC_MCO1Config(RCC_MCO1Source_HSE, 1);
9
  RCC_MCO1Config(RCC_MCO1Source_PLLCLK, RCC_MCO1Div_3);

Sysclock kommt vom einem 25MHz HSE Oszi und ist auf 150MHz eingestellt.
Weiß einer woran das liegt? Bzw. jemand schon probiert 50MHz am MCO1 
rauszubekommen....
Gast #3676645
Lesenswert?
• ▲
▼
Also, ich habe jetzt mit der Zeile:
RCC_MCO1Config(RCC_MCO1Source_PLLCLK, RCC_MCO1Div_3);
50MHz am MCO1 raus bekommen.

Habe festgestellt, dass meine Flankeneinstellung nicht akzeptiert wurde:
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
Ich dachte, es ist besser "rundere" Flanken zu haben. Mit 
GPIO_Speed_100MHz ist jetzt ein Signal am Ausgang zu sehen. Jedoch ist 
es kein Sinus, sondern eher ein Rechteck mit runden Flanken und hat eine 
Ausgangsspannung von 1.3-1.55V. Die PHY scheint mit dem Signal auch 
nicht klar zu kommen. Wurde schon jemand mit so einem Fall konfrontiert?

Grüße
Gast #3676944
Lesenswert?
• ▲
▼
Naja, da geht es doch um Discovery, da sind 8MHz extern dran. Ich habe 
ja 25Mhz und Systemtakt ist auf 150MHz eingestellt. Im Datenblatt steht 
folgendes:
The selected clock to output onto MCO must not exceed 100 MHz (the 
maximum I/O speed).
Da sollten doch die 50Mhz drin sein. Die Leitung auf dem Board ist recht 
kurz und da messe ich am Pin sogar einen zu geringen Pegel. Beim 
stm32F107 habe ich damals die PHY auch durch MCO betrieben, weiß zwar 
nicht wie die Pegel waren, aber die PHY lief auf jeden Fall.
Gast #3677126
Lesenswert?
• ▲
▼
So für die nachfolgend Geplagten mit dem gleichen Problem. MCO läuft nur 
sicher wenn man 25MHZ HSE benutz und das Signal im MII Mode 
durchschleift. Im RMII muss man auf MCO verzichten und tatsächlich einen 
externen 50MHz Quarz verwenden, wenn die PHY selbst keine PLL hat und 
mit 25MHz nicht klar kommt. Dieses Signal nicht vergessen an PA1 der MCU 
durchzuschleifen.
MfG

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.