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?