stm32 时钟频率
时间: 2025-01-02 16:28:22 浏览: 9
### STM32时钟频率配置及设置方法
#### 配置文件中的定义
对于STM32系列微控制器而言,其内部时钟系统的初始化通常是在`stm32f10x.h`这样的头文件中完成初步设定。针对不同型号的设备,比如互联型STM32单片机(如STM32F105/STM32F107),如果使用的外部晶振为8 MHz而非默认值25 MHz,则需调整相应代码行来匹配实际硬件情况[^2]。
```c
#if defined (STM32F10X_CL)
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#else
#define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
#endif /* STM32F10X_CL */
```
这段代码展示了如何根据不同类型的MCU以及所连接的具体晶振频率来进行宏定义上的更改,从而确保后续程序能够基于正确的时基运行。
#### 设置系统时钟频率(SYSCLK)
为了使能更高的性能模式或是适应特定应用场景的需求,开发者可能需要进一步调节SYSCLK——即系统核心工作的主要时钟源。这涉及到PLL(Prescaler and Multiplier, 锁相环路) 的配置,它可以从HSI(High Speed Internal RC Oscillator), HSE(High Speed External Crystal/Ceramic Resonator) 或者其他低功耗选项里选取合适的输入信号并加以放大处理得到最终所需的高频输出[^1]。
具体实现上会依赖于库函数或HAL驱动所提供的API接口,例如:
```c
void SystemClock_Config(void){
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
// 初始化外设时钟...
/* 配置 PLL 和 SYSCLK */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; // 倍频因子
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){
Error_Handler();
}
RCC_ClkInitStruct.ClockType = 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_2) != HAL_OK){
Error_Handler();
}
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
while(__HAL_TIM_GET_FLAG(&htim6, TIM_FLAG_UPDATE) == RESET){}
}
```
上述例子说明了怎样利用STM32CubeMX生成的基础框架下的C语言代码片段去精确控制各个层次的时钟分配关系,包括但不限于AHB/APB总线与时钟预分频器的选择等操作。
#### RTC时钟源选择
另外值得注意的是,在某些应用场合下还需要考虑实时时钟(RTC)模块的工作方式及其供电机制。该部分可以由LSE(Low-Speed External),LSI(Low-Speed Internal)或者是经过特殊路径传递过来的HSE经过分频后的版本作为时间基准提供给RTC使用。这种灵活性允许即使在主电源关闭的情况下也能维持基本的时间跟踪功能[^3]。
阅读全文