[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

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