时钟系统结构大致如下图:
1.时钟树详解
先看上半部分。
从上往下有:
1. 独立看门狗时钟由LSI即低速内部时钟(RC时钟)产生,大致为32kHz,由于是RC电路产生,故时钟不稳定
2. RTC可以选择上面的LSI时钟产生,也可以由低速外部时钟(LSE)产生,大小为32.768khz,具有功耗低,精度高特点
3. MCO1/2是时钟输出管脚,每个管脚可以输出4种时钟源大小,具体可在图中看出,但最高不能超过100MHZ
4. 系统时钟有三个来源;高速内部时钟(HSI)大小为16MHZ,高速外部时钟(HSE)通过OSC_OUT/IN接外部时钟或晶振,以及锁相(PLL)输出时钟,一般采用锁相环可以达到最大值168MHZ
5. 主锁相环主要通过HSE(常用)或者HSI作为输入,然后*N/(M*P) 作为系统时钟的输入源之一,走/Q则供给USB,随机数发送器及SDIO时钟。
副锁相环则是专用供给I2S(音频总线)时钟,可以来源外部时钟输入,HSE或者HSI
6. 以太网和USB时钟
相关寄存器
一般来说,我们希望HCLK能达到最大速度即168MHZ,故我们常常采用锁相环输出。首先看CFGR寄存器:
HPRE是HCLK时钟分频,一般我们在此直接设为0000
PPRE1/2为APB1/2时钟分频,其大小如下图:
按需要设置即可
PLL_CFGR寄存器:
主要设置主/副PLL中 PQR分频系数的值和选择HSE/HSI作为时钟输入
RCC时钟控制寄存器,主要控制PLL和HSI,HSE时钟的使能和开关
时钟使能寄存器: 任何外设开始时候都必须使能时钟。 操作非常简单,寄存器置1即使能。
实例:
![](http://www.stmcu.org/module/forum/data/attachment/forum/201707/14/151802asrsvuz8l098yv8s.png)
1.时钟树详解
![](http://www.stmcu.org/module/forum/data/attachment/forum/201707/14/162114gvssvbv5gb44vusv.png)
![](http://www.stmcu.org/module/forum/data/attachment/forum/201707/14/162123vnc13zvvo6atwv15.png)
先看上半部分。
从上往下有:
1. 独立看门狗时钟由LSI即低速内部时钟(RC时钟)产生,大致为32kHz,由于是RC电路产生,故时钟不稳定
2. RTC可以选择上面的LSI时钟产生,也可以由低速外部时钟(LSE)产生,大小为32.768khz,具有功耗低,精度高特点
3. MCO1/2是时钟输出管脚,每个管脚可以输出4种时钟源大小,具体可在图中看出,但最高不能超过100MHZ
4. 系统时钟有三个来源;高速内部时钟(HSI)大小为16MHZ,高速外部时钟(HSE)通过OSC_OUT/IN接外部时钟或晶振,以及锁相(PLL)输出时钟,一般采用锁相环可以达到最大值168MHZ
5. 主锁相环主要通过HSE(常用)或者HSI作为输入,然后*N/(M*P) 作为系统时钟的输入源之一,走/Q则供给USB,随机数发送器及SDIO时钟。
副锁相环则是专用供给I2S(音频总线)时钟,可以来源外部时钟输入,HSE或者HSI
6. 以太网和USB时钟
相关寄存器
一般来说,我们希望HCLK能达到最大速度即168MHZ,故我们常常采用锁相环输出。首先看CFGR寄存器:
![](http://www.stmcu.org/module/forum/data/attachment/forum/201707/14/162131viaovjijioio33sy.png)
HPRE是HCLK时钟分频,一般我们在此直接设为0000
PPRE1/2为APB1/2时钟分频,其大小如下图:
![](http://www.stmcu.org/module/forum/data/attachment/forum/201707/14/151955py77o0drzrll20e7.png)
按需要设置即可
PLL_CFGR寄存器:
![](http://www.stmcu.org/module/forum/data/attachment/forum/201707/14/162153g544ieqs5ayabeig.png)
主要设置主/副PLL中 PQR分频系数的值和选择HSE/HSI作为时钟输入
RCC时钟控制寄存器,主要控制PLL和HSI,HSE时钟的使能和开关
![](http://www.stmcu.org/module/forum/data/attachment/forum/201707/14/162211h2uw1c22i11iy2z2.png)
时钟使能寄存器: 任何外设开始时候都必须使能时钟。 操作非常简单,寄存器置1即使能。
实例: