简介
由于STM32的性能强大,内部组成复杂,而且时钟频率普遍比51单片机高,不能简单的用一个51单片机的时钟系统来调配,对于F1系列时钟频率高达72MHz,如果把STM32的每一个外设的时钟都打开,那么功耗是不可想象的,同时对于一个电路,时钟频率越快,抗干扰能力就越弱,因此STM32采用了多时钟源的方式来解决这些问题,并且对于每一个片上外设,都需要单独设置时钟的使能位。
时钟源
- HSE时钟–High Speed External Clock Signal (高速外部时钟)
精度高,位于芯片外部,通过OSC_IN 和OSC_OUT 引脚连接外部晶振
常用的是无源晶振(4~16MHZ)通常使用8MHZ(无源) ,一般倍频为72MHZ
晶振分类:
1.无源晶振是有2个引脚的无极性元件,需要借助于时钟电路才能产生振荡信号,自身无法振荡起来
2.有源晶振有4只引脚,是一个完整的振荡器,其中除了石英晶体外,还有晶体管和阻容元件主要看 你应用到的电路,如果有时钟电路,就用无源,否则就用有源。
- HSI时钟–High Speed Internal Clock Signal(高速内部时钟)
位于芯片内部,当外部时钟出现故障时,会切换使用HSI时钟,直到HSE启动成功
大小为8MHZ 一般会被分频成4MHZ - LSE时钟–Low Speed External Clock Signal(低速外部时钟)
位于芯片外部,通过OSC32_IN和OSC32_OUT连接频率为32.768MHz的石英晶体 - LSI时钟–Low Speed Internal Clock Signal(低速内部时钟)
位于芯片内部,是一个RC震荡器,频率为40KHz - PLLCLK–锁相倍频时钟源
PLLCLK本身的不是一个独立的内部或者外部时钟源,其来源可以是HSE或者HSI
相关寄存器
typedef struct
{
__IO uint32_t CR; //时钟控制寄存器
__IO uint32_t CFGR; //时钟配置寄存器
__IO uint32_t CIR; //时钟中断寄存器
__IO uint32_t APB2RSTR