文章目录
- 前言
- 一、储备知识
- 二、输入时钟
- 1、高速外部时钟
- 2、高速内部时钟
- 3、低速外部时钟
- 4、低速内部时钟
- 三、系统时钟
- 四、系统时钟分频得到的其他时钟
前言
本文主要介绍STM32F103的时钟系统,包括输出时钟、系统时钟、以及由系统时钟得到的各个时钟。
在嵌入式开发中,很少有人关注系统的时钟。一般配置好片上外设寄存器,就能使用这些外设。但STM32F103的时钟可谓非常重要,是整个的心脏,开发者也能通过时钟,宏观上把握STM32F103外设的工作机制。
一、储备知识
- STM32F103时钟最大频率是72MHZ
- APB1是低速总线,APB2是高速总线
二、输入时钟
STM32F103的输入时钟可以来自不同时钟源
- 按时钟频率分,有高速时钟和低速时钟。高速时钟为STM32F103的主时钟提供时钟信号,低速时钟为实时时钟(Real Time Clock,RTC)和独立看门狗(Independent Watch Dog,IWDG)提供时钟信号
- 按芯片角度分,有内部时钟源和外部时钟源。内部时钟由RC振荡器产生,起振较快,因此系统主时钟在芯片刚上电时默认采用内部高速时钟。而外部时钟通常由外部晶振输入,有较高的精度和稳定性。故上电后将主时钟转而采用外部高速数字信号。
1、高速外部时钟
高速外部时钟(High Speed External clock signal,HSE)通常以外部晶振作为时钟源,频率范围为4~16MHz,一般推荐使用8MHz
下面以外接8M晶振作为高速外部时钟为例,沿着图中时钟树((1)–>(2)–>…)介绍STM32F103的时钟系统是如何从高速外部时钟开始一步步得到系统时钟SYSCLK的。
- OSC_IN和OSC_OUT:连接8M晶振两端
- PLLXTPRE(HSE divider for PLL entry,PLL输入前的分频):通过配置寄存器,可以控制PLLXTPRE的输出,一般选择不分频。因此,经过PLLXTPRE后,输出仍然是8MHz的信号。
- PLLSRC(PLL entry clock source,PLL输入时钟源):通过配置寄存器,控制PLLSRC的输出是HSE还是HSI。通常选择HSE。故经过PLLSRC后,输出仍是8M.
- PLL(Phase Locked Loop,锁相环,用于配置倍频系数):8M的HSE经过PLL后的输出时钟称为PLLCLK。通过配置寄存器,选择倍频系数PLLMUL(PLL multiplication factor),可决定PLLCLK的输出频率。通常为了是STM32D103满频工作,将倍频系数设为9。于是,经过PLL后,8M的HSE变成了72M的PLLCLK。
- SW:PLLCLK遇到多路选择器SW。通过配置寄存器,可以选择SW输出为PLLCLK、HSE、或HSI。SW的输出即为系统时钟SYSCLK。通常选择PLLCLK作为SW输出。因此,STM32F103的系统时钟SYSCLK为72MHz。
2、高速内部时钟
高速内部时钟(High Speed Internal clock signal,HSI)由片内RC振荡器产生,频率为8MHz,但不稳定。
3、低速外部时钟
低速外部时钟(Low Speed External clock signal,LSE)通常以外部晶振作为时钟源,主要供给实时时钟模块,所以一般采用32.768kHz(32768=215)
4、低速内部时钟
低速内部时钟(Low Speed Internal clock signal,LSI)由片内RC振荡器产生。可以提供给实时时钟模块和看门狗模块,频率为40kHz
三、系统时钟
系统时钟由SW多路选择器决定,有HSE、HSI、PLLCLK三种选择。SYSCLK的最高频率可达72MHz(通常也工作在72MHz),是STM32F103大部分部件的时钟来源。
STM32F103从上电开始,选用HSI作为初始系统时钟。完成初始化后,选用更加稳定可靠的HSE作为系统时钟的来源。
用户可以通过MCO引脚(Main Clock Output,主时钟输出)来实时检测时钟系统是否正常运行。
四、系统时钟分频得到的其他时钟
系统时钟SYSCLK经过AHB预分频器输出到各个部件:
- HCLK:
- FCLK:
- PCLK1:
- PCLK2:
- SDIOCLK:
- FSMCCLK:
- STCLK:
- TIMXCLK:
- TIMxCLK:
- ADCCLK: