Hallo,
Über die USART2 vom NucleoF334 will ich debug Meldungen mit printf an
den PC ausgeben. Dies funktioniert solange ich SYSCLK vom HSI über die
PLL erzeuge, nicht jedoch wenn ich den HSE wähle, dann kommen am
Terminal keine vernünftigen Zeichen an.
1 | void SystemClock_Config(void)
|
2 | {
|
3 | RCC_OscInitTypeDef RCC_OscInitStruct;
|
4 | RCC_ClkInitTypeDef RCC_ClkInitStruct;
|
5 | RCC_PeriphCLKInitTypeDef PeriphClkInit;
|
6 |
|
7 | RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
8 | RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
|
9 | RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
10 | RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
11 | RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
12 | RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL8;
|
13 | HAL_RCC_OscConfig(&RCC_OscInitStruct);
|
14 |
|
15 | RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
16 | |RCC_CLOCKTYPE_PCLK1;
|
17 | RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
18 | RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV2;
|
19 | RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
20 | RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
21 | HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1);
|
22 |
|
23 | PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_HRTIM1|RCC_PERIPHCLK_USART2;
|
24 | PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;
|
25 | PeriphClkInit.Hrtim1ClockSelection = RCC_HRTIM1CLK_PLLCLK;
|
26 | HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);
|
27 |
|
28 | HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
|
29 |
|
30 | HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
|
31 |
|
32 | __SYSCFG_CLK_ENABLE();
|
33 |
|
34 | }
|
Wechsle ich allerdings auf den HSI (rest gleich wie oben):
1 | RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
|
2 | RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL16;
|
funktioniert die Kommunikation.
Woran kann das liegen?