stm32f103c8t6初始化系统时钟为72M
时间: 2023-08-01 22:07:30 浏览: 92
stm32f103时钟
要将STM32F103C8T6的系统时钟初始化为72MHz,需要执行以下步骤:
1. 启用外部晶振作为时钟源,设置PLL倍频系数和分频系数
```
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
// 启用外部晶振作为时钟源
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
// 设置PLL倍频系数和分频系数
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
// 初始化失败
while(1);
}
```
在上述代码中,我们启用外部晶振作为时钟源,并设置PLL的倍频系数为9,即将外部晶振的频率乘以9倍,得到72MHz的系统时钟。
2. 配置系统时钟的分频系数和Flash访问延迟
```
// 配置系统时钟的分频系数和Flash访问延迟
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
{
// 初始化失败
while(1);
}
```
在上述代码中,我们将系统时钟的分频系数设置为1,AHB总线的分频系数设置为1,APB1总线的分频系数设置为2,APB2总线的分频系数设置为1。
3. 配置滴答定时器(可选)
由于系统时钟的频率改变,滴答定时器的时钟频率也会改变。如果需要保持滴答定时器的时钟频率不变,需要重新配置滴答定时器。
```
// 重新配置滴答定时器
uint32_t uwTimclock = HAL_RCC_GetPCLK1Freq();
uint32_t uwPrescalerValue = (uint32_t) ((uwTimclock / 10000) - 1);
HAL_SYSTICK_Config(uwTimclock / 1000);
```
在上述代码中,我们重新计算滴答定时器的预分频系数,以保持滴答定时器的时钟频率为10kHz。然后重新配置滴答定时器,使其每毫秒产生一次中断。
阅读全文