STM32时钟系统详解:从时钟源到外设时钟配置
·
一、时钟简介
STM32的时钟,就相当于我们控制其运行的节奏器。当出现脉冲信号,或者边沿信号的时候,此时芯片就会控制内部的程序运行,同时结合外设来执行所需的功能。所以STM32微控制器的时钟系统是其稳定运行的基础,它为CPU、内存、外设等提供精确的时序。
二、时钟源
STM32的时钟源主要分为以下几类:
- 高速外部时钟(HSE):通常由外部晶振(如8MHz)提供,精度高,是系统主时钟(SYSCLK)的主要来源(较为常用)
- 高速内部时钟(HSI):芯片内部RC振荡器产生(通常为16MHz),精度较低但无需外部元件,用于系统启动或作为备用时钟。
- 低速外部时钟(LSE):通常连接32.768kHz晶振,为实时时钟(RTC)和独立看门狗(IWDG)提供低功耗时钟。
- 低速内部时钟(LSI):内部RC振荡器(约32kHz),为独立看门狗(IWDG)和自动唤醒单元(AWU)提供时钟,功耗低。
注:I为内部,E为外部,H为高速,L为低速
三、时钟树与系统时钟(SYSCLK)
STM32的时钟源通过一个复杂的“时钟树”进行分配和倍频。其核心是系统时钟(SYSCLK),它决定了CPU的运行速度。SYSCLK的来源可以是:
- HSE:直接或经PLL倍频后作为SYSCLK。
- HSI:直接或经PLL倍频后作为SYSCLK。
- PLL:锁相环,可将HSE或HSI的频率倍频至更高(如72MHz、168MHz等),最高可达168MHz,是获得高性能系统时钟的关键。
系统上电后,默认使用HSI作为SYSCLK。用户程序需要初始化时钟树,选择并配置合适的时钟源和PLL参数,以切换到目标频率。
四、主要时钟总线
SYSCLK经过分频后,产生不同速度的总线时钟,驱动各类外设:
- AHB总线时钟(HCLK):系统时钟 SYSCLK 经过 AHB 预分频器分频之后得到时钟叫 AHB 总线时钟,为CPU、内存、DMA等高速部件提供时钟。
- APB1总线时钟(PCLK1):由 HCLK 经过低速 APB1 预分频器得到,为低速外设(如I2C1、UART2、SPI2等)提供时钟,通常频率较低。
- APB2总线时钟(PCLK2):由 HCLK 经过高速 APB2 预分频器得到,为高速外设(如GPIO、ADC1、TIM1等)提供时钟,频率通常高于PCLK1。
五、外设时钟使能
STM32的外设在默认情况下时钟是关闭的,以降低功耗。在使用任何外设(如GPIO、USART、SPI)前,必须先在对应的总线时钟控制寄存器(RCC_AHBxENR、RCC_APBxENR)中使能其时钟。
void SystemClock_Config(void);
__HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA时钟
__HAL_RCC_GPIOA_CLK_DISABLE(); //禁止GPIOA时钟
六、时钟配置步骤(以STM32F103使用HSE和PLL为例)
- 使能HSE:等待HSE就绪。
- 配置PLL:选择HSE作为PLL输入,设置倍频系数(如9倍频,将8MHz变为72MHz)。
- 选择系统时钟源:将SYSCLK切换为PLL输出。
- 配置总线分频器:设置AHB、APB1、APB2的分频系数。
- 更新系统核心时钟变量:确保延时函数等依赖系统时钟的代码正常工作。
七、总结

理解STM32的时钟系统是进行底层开发和性能优化的关键。合理选择时钟源、配置PLL以及管理外设时钟,可以在满足性能需求的同时,有效控制功耗。
更多推荐


所有评论(0)