[HAL] HSE + PLL = clock zu langsam

OP Persönliche Seite #7502779
Lesenswert?
• ▲
▼

Guten Nachmittag,

hab einen 8MHz HSE in CubeMX konfiguriert und Code generieren lassen.

Funktioniert alles einwandfrei - nur ist der Clock ungefähr halb so schnell, als er sein sollte (auf meinem STM32L1)

Code ist dieser hier:

1
void SystemClock_Config(void) {
2
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
3
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
4
  RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
5

6
  /** Configure the main internal regulator output voltage
7
   */
8
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
9
  /** Initializes the RCC Oscillators according to the specified parameters
10
   * in the RCC_OscInitTypeDef structure.
11
   */
12
  RCC_OscInitStruct.OscillatorType =
13
      RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_HSE;
14
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
15
  RCC_OscInitStruct.LSIState = RCC_LSI_ON;
16
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
17
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
18
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12;
19
  RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV3;
20
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
21
    Error_Handler();
22
  }
23
  /** Initializes the CPU, AHB and APB buses clocks
24
   */
25
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK |
26
                                RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
27
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
28
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
29
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
30
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
31

32
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) {
33
    Error_Handler();
34
  }
35
  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LCD;
36
  PeriphClkInit.LCDClockSelection = RCC_RTCCLKSOURCE_LSI;
37

38
  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) {
39
    Error_Handler();
40
  }
41
}

Sieht alles suppi aus (HSE_VALUE ist auch auf 8MHz gesetzt).

Kurioserweise, wenn ich statt dem HSE den HSI16 als PLL-Input-Clock benutze und dafür dann den Multiplikator auf *6 anpasse, weil der ja 16MHz statt 8MHz hat, kommt der richtige Takt raus.

Hab den Oszillator mit meinem Oszi gemessen, wunderbare 8MHz und die liegen an dem richtigen OSC_IN Pin an. Es gibt auch keine Timeouts bei der Initialisierung usw ... Sollte alles stimmen, aber das tut es nicht. 🙈

Die Berechnung des SystemClocks ergibt 32MHz.

Ganz seltsam, kann keinen Fehler finden und trotzdem passt der Takt nicht ...

Hat jemand soetwas schonmal gesehen?

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.