系统时钟配置

发布于 2022-12-11  192 次阅读


时钟树

系统时钟配置

配置HSE_VALUE

在stm32f1xx_hal_conf.h文件中设置外部晶振频率

#if !defined  (HSE_VALUE)
  #define HSE_VALUE    8000000U /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */

#if !defined  (HSE_STARTUP_TIMEOUT)
  #define HSE_STARTUP_TIMEOUT    100U   /*!< Time out for HSE start up, in ms */
#endif /* HSE_STARTUP_TIMEOUT */


选择时钟源,配置PLL

通过HAL_RCC_OscConfig()函数配置

HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct);该函数只有一个形参,就是结构体 RCC_OscInitTypeDef 类型指针。接下来我们看看结构体
RCC_OscInitTypeDef 的定义:

RCC_OscInitTypeDef rcc_osc_init = {0};

rcc_osc_init.OscillatorType = RCC_OSCILLATORTYPE_HSE; /* 选择要配置 HSE */
rcc_osc_init.HSEState = RCC_HSE_ON; /* 打开 HSE */
rcc_osc_init.HSEPredivValue = RCC_HSE_PREDIV_DIV1; /* HSE 预分频系数 */
rcc_osc_init.PLL.PLLState = RCC_PLL_ON; /* 打开 PLL */
rcc_osc_init.PLL.PLLSource = RCC_PLLSOURCE_HSE; /* PLL 时钟源选择 HSE */
rcc_osc_init.PLL.PLLMUL = RCC_PLL_MUL9; /* PLL 倍频系数 */
if (HAL_RCC_OscConfig(&rcc_osc_init) != HAL_OK)/* 初始化 */
  {
    Error_Handler();
  }

选择系统时钟源

通过HAL_RCC_ClockConfig()函数配置

HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct,
uint32_t FLatency);该函数有两个形参

第一个形参 RCC_ClkInitStruct 是结构体RCC_ClkInitTypeDef 类型指针变量,用于设置 SYSCLK 时钟源以及 SYSCLK、 AHB、 APB1 和 APB2 的分频系数。

第二个形参 FLatency 用于设置 FLASH 延迟。
RCC_ClkInitTypeDef 结构体类型定义比较简单,我们来看看其定义:

RCC_ClkInitTypeDef rcc_clk_init = {0};

/* 选中 PLL 作为系统时钟源并且配置 HCLK,PCLK1 和 PCLK2;表示我们要配置的是 SYSCLK、 HCLK、 PCLK1 和 PCLK 四个
时钟*/
rcc_clk_init.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK 
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
rcc_clk_init.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;/* 设置系统时钟来自 PLL */
rcc_clk_init.AHBCLKDivider = RCC_SYSCLK_DIV1; /* AHB 分频系数为 1 */
rcc_clk_init.APB1CLKDivider = RCC_HCLK_DIV2; /* APB1 分频系数为 2 */
rcc_clk_init.APB2CLKDivider = RCC_HCLK_DIV1; /* APB2 分频系数为 1 */

/* 同时设置 FLASH 延时周期为 2WS,也就是 3 个 CPU 周期。 */
if (HAL_RCC_ClockConfig(&rcc_clk_init, FLASH_LATENCY_2) != HAL_OK)
  {
    Error_Handler();
  }

PLL 时钟为 PLLCLK = HSE * 9 = 8MHz * 9 = 72MHz。同时我们选择系统时钟源为 PLL,所以系统时钟 SYSCLK=72MHz。

AHB 分频系数为 1,故频率为 HCLK=SYSCLK/1=72MHz。

APB1 分频系数为 2,故其频率为 PCLK1=HCLK/2=36MHz。

APB2 分频系数为 1,故其频率为 PCLK2=HCLK/1=72MHz。

  • alipay_img
  • wechat_img
想法不去做终究就只是想法
最后更新于 2022-12-11