STM32的时钟处理

STM32的时钟主要包括四个部分:系统时钟SYSCLK,AHB总线时钟HCLK,APB2总线时钟PCLK2,APB1总线时钟PCLK1。主要的时钟处理为设置各个时钟的频率和不同总线时钟和外设时钟的开启。

通常的设置为PCLK2=HCLK=SYSCLK=PLLCLK=72MHz,PCLK1=HCLK/2=36MHz。

库中自带了SetSysClockTo72()通过寄存器操作实现上述设置,也可以通过RCC库的函数进行具体的设置.

系统时钟设置

时钟信号有三个来源:高速外部时钟HSE、高速内部时钟HSI(实际使用一半的频率HSI/2)、锁相环倍频输出时钟PLL。其中的PLL时钟的来源可以是HSE或HSI,但是HSI存在漂移,通常不使用。

通常情况下HSE设置为8MHz, 因此PLL的倍频因子设置为9,从而得到72MHz的系统时钟.

# 设置HSE或HSI的开启
RCC_HSEConfig(RCC_HSE_ON);
RCC_HSICmd(ENABLE);
# 设置PLL的输入为HSE或HSI/2 pllmul为倍频因子
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, pllmul);
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, pllmul);
RCC_PLLCmd(ENABLE);
# 设置系统时钟为PLL的输出
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

总线时钟设置

总线时钟通常是在系统时钟的基础上做分频.

AHB总线时钟为HCLK,是系统时钟在AHB分频器按1分频得到,因此为72MHz.

APB2总线时钟为PCLK2 ,是AHB总线时钟在APB2分频器按1分频得到,因此为72MHz.

APB1总线时钟为PCLK1,是AHB总线时钟在APB1分频器二分频得到,因此为36MHz.

外设时钟设置

具体使用外设时的时钟频率要根据需要具体设置.

  • USB时钟:通常令PLL时钟为72MHz,USB时钟为48MHz,通过USB分频器的1.5倍分频实现.
  • Cortex时钟:通常为9MHz,通过HCLK经过8分频得到.用于驱动内核定时器SysTick.
  • ADC时钟:最高为14MHz,具体根据使用情况选择.通过PCLK2分频得到.
  • RTC时钟:可以通过HSE/128或LSE或HSI提供.
  • 独立看门狗时钟:通过LSI提供.
  • MCO信号输出:对外提供时钟信号,通过复用GPIO实现.时钟来源可以是PLLCLK/2,HSI,HSE,SYSCLK
  • GPIO信号输出:使用RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx, ENABLE);开启
Lei Yang
Lei Yang
PhD candidate

My research interests include visual speech recognition and semantics segmentation.