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?