STM32系统时钟配置方法:使用内部高速时钟HSI作为系统时钟源
如何使用内部时钟源HSI配置STM32F103C8T6的系统时钟
本文将配置为STM32F103C8T6使用内部高速时钟(HSI)和相位锁定环(PLL),以使系统时钟(SYSCLK)达到48MHz为例进行讲述。
STM32时钟系统概述
STM32的时钟系统非常灵活,可以根据应用需求进行精细的配置。它包括多种时钟源,如内部高速时钟(HSI)、外部高速时钟(HSE)、内部低速时钟(LSI)、外部低速时钟(LSE)和相位锁定环(PLL)等。通过合理配置这些时钟源,我们可以优化微控制器的性能和功耗。
配置步骤
1. 确定时钟需求
根据STM32F103C8T6的功能需求,本项目需要将系统时钟配置为48MHz,以满足外设通信和数据处理的速度要求。
2. 选择时钟源和配置PLL
由于STM32F103C8T6的HSI固定频率为8MHz,我们将使用HSI和PLL来实现48MHz的系统时钟频率。具体步骤如下:
- 启用HSI作为PLL的输入时钟源。
- 将HSI时钟除以2,然后配置PLL倍频因子为12,以生成48MHz的PLL输出时钟。
- 将PLL输出时钟设置为系统时钟源。
3. 配置代码示例
下面是使用STM32 HAL库进行配置的示例代码:
#include "stm32f1xx_hal.h"
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
// 启用HSI,并配置PLL
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
// 选择PLL作为系统时钟源
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|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_1) != HAL_OK)
{
Error_Handler();
}
}
void Error_Handler(void)
{
while(1)
{
}
}
int main(void)
{
HAL_Init();
SystemClock_Config();
// 用户代码...
}
总结
通过以上步骤,我们可以成功将STM32F103C8T6的系统时钟通过内部高速时钟HSI配置为48MHz。
希望本文能帮助大家更好地理解STM32时钟系统的配置方法。
请根据你的实际需求进行调整,如果有任何疑问或者需要进一步的帮助,可以评论区讨论。
作者:知行好事