1. 时钟的概念
时钟是由电路产生的具有周期性的脉冲信号,相当于单片机的心脏,要想使用单片机的外设必须开启时钟。
时钟对单片机有什么作用?
1. 驱动外设的本质是寄存器,而寄存器需要时钟触发才能改写值。
2. 时钟频率越高,CPU在相同的时间能够执行更多的指令,运行速度更快。
2. 时钟树
STM32微控制器芯片上的时钟分配和控制结构,它定义了各种时钟源、时钟分频、时钟分配等,形成一个树状结构。
时钟树的作用?
1. 给相对独立的外设模块提供时钟,不同的外设需要的时钟频率不一致,需要通过时钟树分配相应的时钟。
2. 降低整个芯片的功耗, 所有外设时钟默认都是关闭状态(disable)当我们使用某个外设就要开启这个外设的时钟(enable) ,没有让所有外设都使用高速时钟造成浪费。
2.1 时钟源
STM32总共有四个时钟源为什么要有四个时钟源,兼容不同速度的外设, STM32的四个时钟源分别为HSE, LSE, HSI, LSI。
HSE时钟:高速的外部时钟。
来源: 无源晶振,通常使用8M, STM32F1系列为(4~16M)
作用:可不分频或2分频(频率/2)作为PLL锁相环的输入,还可直接不分频作为系统时钟,128分频作为外设RTC时钟的输入
HSI时钟: 高速的内部时钟
来源: 芯片内部,大小为8M,当HSE故障时,系统时钟会自动切换到HSI,直到HSE启动成功。
作用: 可直接作为系统时钟或在2分频后作为PLL输入。HSI RC振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间比HSE晶体振荡器短。然而,即使在校准之后它的时钟频率精度仍较差。
LSE: 低速的外部时钟
来源:芯片内部,LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器。它为实时时钟或者其他定时功能提供一个低功耗且精确的时钟源。
作用: 直接作为RTC的时钟来源
LSI: 低速的内部时钟
来源: 内部芯片,LSI RC担当一个低功耗时钟源的角色,它可以在停机和待机模式下保持运行,LSI时钟频率大约40kHz(在30kHz和60kHz之间)。
作用: 为独立看门狗和自动唤醒单元(RTC)提供时钟。
2.2 锁相环时钟PLLCLK
锁相环时钟:PLLCLK
来源: 选择HIS振荡器除2或HSE振荡器为PLL的输入时钟,和选择倍频因子,必须在其被激活前完成。一旦PLL被激活,这些参数就不能被改动。
作用: 内部PLL可以用来倍频HSI的输出时钟或HSE晶体输出时钟(倍频数2~16倍),而经过倍频变成PLLCLK可以作为系统时钟源
注意: PLL时钟源头使用HIS/2的时候,PLLMUL最大只能 是16,这个时候PLLCLK最大只能是64M,小于ST官方推 荐的最大时钟72M。如果需要在应用中使用USB接口,PLL必须被设置为输出48或72MHZ时钟,用于提供48MHz的USBCLK时钟。
2.3 系统时钟
系统时钟:SYSCLK系统时钟是时钟树的最终输出,它是整个微控制器系统的主时钟。
来源:HSI,HSE,PLLCLK
注意:F103通常的配置是SYSCLK = PLLCLK=72M(最大的时钟频率, STM32官方推荐)
通常系统时钟配置的输出流程:
2.4 HCLK时钟
HCLK: AHB高速总线时钟,速度最高为72MHZ
来源: 系统时钟分频得到,一般设置HCLK=SYSCLK=72M
作用: 为AHB总线的外设提供时钟、为Cortex系统定时器提供时钟(SysTick)、为内核提供时钟(FCLK)。
2.5 PCLK1时钟
PCLK1: APB1低速总线时钟,最高为36MHZ。
来源: HCLK分频得到,一般配置PCLK1 = HCLK/2 = 36MHZ。
作用: 为APB1总线的外设提供时钟。1或2倍频之后则为APB1总线的定时器2~7提供时钟,最大为72M。
2.6 PCLK2时钟
PCLK2: APB2高速总线时钟,最高为72MHZ
来源: HCLK分频得到,一般配置PCLK1=HCLK=72M
作用: 为APB2总线的外设提供时钟。为APB2总线的定时器1和8提供时钟,最大为72M。APB2分频器还有一路输出供ADC分频器使用,分频后送给ADC模块使用。
2.7 RTC时钟
RTC:实时时钟。
来源:HSE分频得到, LSE、 LSI
作用:它拥有一组连续计数的计数器,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。实质上它是一个掉电后还可以继续运行的定时器。