STM32WB 振荡器与时钟

一、振荡器类型与配置

1、振荡器类型:LSE、LSI1、LSI2、MSI、HSI、HSI48、HSE

STM32WB 振荡器与时钟

2、MX中的振荡器配置

STM32WB 振荡器与时钟

3、代码配置样例

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSI1
                              |RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  RCC_OscInitStruct.LSIState = RCC_LSI_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

二、系统总线时钟与配置

1、总线时钟:SYSCLK、HCLK、HCLK2、HCLK4、PCLK1、PCLK2

STM32WB 振荡器与时钟

2、MX中的总线时钟配置

STM32WB 振荡器与时钟

3、代码配置样例

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK4|RCC_CLOCKTYPE_HCLK2
                              |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSE;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.AHBCLK4Divider = RCC_SYSCLK_DIV1;
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
  {
    Error_Handler();
  }

三、PLL时钟与配置

1、PLL时钟源选择:MSI、HSI、HSE或者NONE

STM32WB 振荡器与时钟

2、PLL分频参数:PLLM、PLLN、PLLP、PLLQ、PLLR

3、MX中的PLL配置

STM32WB 振荡器与时钟

四、外设时钟类型与时钟源配置

1、外设时钟类型:CLK_USART1、CLK_LPUART1、CLK_I2C1、CLK_I2C3、CLK_LPTIM1、CLK_LPTIM2、CLK_SAI1、CLK_USB、CLK_RNG、CLK_ADC、CLK_RTC/LCD、CLK_RFWAKEUP、CLK_SMPS

STM32WB 振荡器与时钟

2、MX中的外设时钟源配置

 1)PLLSAI1时钟配置

STM32WB 振荡器与时钟

2)USART1时钟源配置

STM32WB 振荡器与时钟

3)LPUART1时钟源配置

STM32WB 振荡器与时钟

4)I2C1时钟源配置

 STM32WB 振荡器与时钟

5)I2C3时钟源配置

STM32WB 振荡器与时钟

6)LPTIM1时钟源配置

 STM32WB 振荡器与时钟

7)LPTIM2时钟源配置

 STM32WB 振荡器与时钟

8)SAI1时钟源配置

STM32WB 振荡器与时钟

9)USB时钟源配置

 STM32WB 振荡器与时钟

10)RNG时钟源配置

STM32WB 振荡器与时钟

11)ADC时钟源配置

 STM32WB 振荡器与时钟

12)RFWAKEUP时钟源配置

 STM32WB 振荡器与时钟

13)SMPS时钟源配置

 STM32WB 振荡器与时钟

14)RTC/LCD时钟源配置

 STM32WB 振荡器与时钟

3、代码配置样例

  PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SMPS|RCC_PERIPHCLK_RFWAKEUP
                              |RCC_PERIPHCLK_RTC;
  PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
  PeriphClkInitStruct.RFWakeUpClockSelection = RCC_RFWKPCLKSOURCE_LSI;
  PeriphClkInitStruct.SmpsClockSelection = RCC_SMPSCLKSOURCE_HSE;
  PeriphClkInitStruct.SmpsDivSelection = RCC_SMPSCLKDIV_RANGE0;
  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  {
    Error_Handler();
  }