时钟信号的作用是控制电路按节拍工作,时钟信号频率越高,电路工作速度越快。很多单片机只有一种时钟信号,而STM32单片机有多种时钟信号,并且可以通过分频或倍频来降低和提高时钟频率,从而得到更多频率的时钟信号,以满足各种不同电路的需要。
STM32F103单片机时钟系统图(时钟树)如图2-12所示。
图2-12 STM32F103单片机时钟系统图(时钟树)
STM32F103单片机有4个时钟源,分别是HSI、HSE、LSE、LSI,其他所有的时钟信号都由这4个时钟源信号分频或倍频而来。
HSI为高速内部时钟,频率为8MHz,由单片机内部的RC时钟电路产生,其精度不高。HSE为高速外部时钟,频率为4~16MHz,一般为8MHz,由单片机OSC_IN、OSC_OUT引脚外接晶振与内部电路构成的时钟电路产生,其精度高。LSE为低速外部时钟,频率为32.768kHz,由单片机OSC32_IN、OSC32_OUT引脚外接晶振与内部电路构成的时钟电路产生,其精度高,可直接用作RTCCLK(实时时钟)提供给RTC电路。LSI为低速内部时钟,频率为40Hz,由单片机内部的RC时钟电路产生,其精度不高,可直接用作IWDGCLK(独立看门狗时钟)提供给IWDG电路,也可用作RTCCLK提供给RTC电路。
SYSCLK(系统时钟)是单片机非常重要的时钟,最高频率为72MHz,片上外设工作所需的时钟大多由该时钟分频得到。SYSCLK时钟由HSI或HSE时钟倍频而形成。
HSI时钟形成SYSCLK时钟的过程:HSI电路产生8MHz的HSI时钟,分作两路,一路直接通过选择器2而成为SYSCLK时钟;另一路先经过2分频变成4MHz,再经过选择器2后由锁相环倍频(倍频数可用有关寄存器设置)电路进行升频,得到PLLCLK(倍频时钟),该时钟若被选择器2选择通过,则可成为SYSCLK时钟。
HSE时钟形成SYSCLK时钟的过程:HSE电路产生8MHz(4~16MHz,一般为8MHz)的HSE时钟,分作4路,第一路直接通过选择器2成为SYSCLK时钟;第二路经过选择器3、选择器1后,由锁相环倍频电路进行升频,得到PLLCLK(倍频时钟),再经选择器2则可成为SYSCLK时钟;第三路先进行2分频;然后按第二路相同的方式成为SYSCLK时钟;第四路先经128分频(÷128),再通过选择器4成为RTCCLK,提供给RTC电路。
SYSCLK时钟除会提供给AHB预分频器外,还可直接作为I2S2CLK、I2S3CLK时钟,分别提供给I2S2、I2S3外设。SYSCLK时钟需要通过一个门电路才能去I2S外设,只有在该门电路的外设时钟使能端加使能信号时,时钟才能通过门电路。
SYSCLK时钟经AHB预分频器分频得到AHB时钟(最高频率为72MHz),提供给SDIO、FSMC、AHB总线、核心存储器、DMA等。AHB时钟经APB1预分频器分频后得到APB1时钟(最高频率为36MHz),提供给APB1外设和定时器2~7(TIM2~TIM7)。AHB时钟经APB2预分频器分频后得到APB2时钟(最高频率为72MHz),直接提供给APB2外设(如GPIO端口)作为时钟信号;另外,经分频器提供给定时器TIM1和TIM8,还经ADC预分频器后提供给ADC1~ADC3。
USB接口所需的USBCLK时钟是由PLLCLK时钟经USB预分频器分频而得到的,若PLLCLK时钟的频率为72MHz,USB预分频器的分频数为/1.5,则USBCLK时钟的频率为48MHz(即72MHz÷1.5)。
STM32F103单片机的时钟除可供给内部电路使用外,还可以向外供给其他电路使用。HSI、HSE、SYSCLK时钟和经2分频的PLLCLK时钟送到选择器5,选择某种时钟信号后从MCO端口(PA8引脚)向外输出。
RCC_CR(时钟控制寄存器)主要用来开启(使能)和关闭时钟,并反映时钟状态,其偏移地址为0x00,复位值为0x000 XX83(X表示未定义)。RCC_CR寄存器的组成位如图2-13所示,各位功能说明见表2-3。
RCC意为复位与时钟控制(Reset&Clock Control),RCC寄存器区的基地址为0x4002 1000,RCC_CR寄存器的地址为0x4002 1000(基地址0x4002 1000+偏移地址0x00)。
图2-13 RCC_CR寄存器的组成位
表2-3 RCC_CR寄存器各位功能说明
RCC_CFGR(时钟配置寄存器)主要用来设置时钟的分频数和倍频数,其偏移地址为0x04(RCC基地址为0x4002 1000),复位值为0x000 0000。RCC_CFGR寄存器的组成位如图2-14所示,各位功能说明见表2-4。
图2-14 RCC_CFGR寄存器的组成位
表2-4 RCC_CFGR寄存器各位功能说明
续表
RCC_APB2RSTR(APB2外设复位寄存器)主要用来复位APB2总线的外设,其偏移地址为0x0C,复位值为0x0000 0000。RCC_APB2RSTR寄存器的组成位如图2-15所示,各位功能说明见表2-5。
图2-15 RCC_APB2RSTR寄存器的组成位
表2-5 RCC_APB2RSTR寄存器各位功能说明
续表
RCC_APB1RSTR(APB1外设复位寄存器)主要用来复位APB1总线的外设,其偏移地址为0x10,复位值为0x0000 0000。RCC_APB1RSTR寄存器的组成位如图2-16所示,各位功能说明见表2-6。
图2-16 RCC_APB1RSTR寄存器的组成位
表2-6 RCC_APB1RSTR寄存器各位功能说明
续表
RCC_AHBENR(AHB外设时钟使能寄存器)主要用来开启/关闭AHB总线外设的时钟,其偏移地址为0x14,复位值为0x0000 0014。RCC_AHBENR寄存器的组成位如图2-17所示,各位功能说明见表2-7。
图2-17 RCC_AHBENR寄存器的组成位
表2-7 RCC_AHBENR寄存器各位功能说明
续表
RCC_APB2ENR(APB2外设时钟使能寄存器)主要用来开启/关闭APB2总线外设的时钟,其偏移地址为0x18,复位值为0x0000 0000。RCC_APB2ENR寄存器的组成位如图2-18所示,各位功能说明见表2-8。
图2-18 RCC_APB2ENR寄存器的组成位
表2-8 RCC_APB2ENR寄存器各位功能说明
续表
RCC_APB1ENR(APB1外设时钟使能寄存器)主要用来开启/关闭APB1总线外设的时钟,其偏移地址为0x1C,复位值为0x0000 0000。RCC_APB1ENR寄存器的组成位如图2-19所示,各位功能说明见表2-9。
图2-19 RCC_APB1ENR寄存器的组成位
表2-9 RCC_APB1ENR寄存器各位功能说明
续表
RCC_CSR(控制/状态寄存器)主要用来开启/关闭LSI(内部低速时钟),并用标志位反映一些复位状态,其偏移地址为0x24,复位值为0x0000 0000。RCC_CSR寄存器的组成位如图2-20所示,各位功能说明见表2-10。
图2-20 RCC_CSR寄存器的组成位
表2-10 RCC_CSR寄存器各位功能说明
续表