基于STM32F407ZGT6的时钟树

1.时钟是怎么产生的?

时钟产生比较复杂,方法也有很多种,但它们都是从晶体谐振器(简称晶振)开始的,在石英晶片上加上交变电压,晶体就会产生机械振动,机械形变振动又会产生交变电场,尽管这种交变电场的电压极其微弱,但其振动频率是十分稳定的。

STM32时钟系统主要的目的就是给相对独立的外设模块提供时钟,为了降低整个芯片的功耗,所有外设时钟默认都是关闭状态(disable),当我们使用某个外设就要开启这个外设的时钟(enable)。

不同外设需要的时钟频率不同,没必要所有外设都用高速时钟造成浪费,而且有些外设也接受不了这么高的频率,这也是为什么STM32有四个时钟源(HSE、 LSE、HSI、LSI)的原因,就是为了兼容不同速度的外设。

而51单片机不需要配置时钟,是因为一个时钟开了之后所有的功能都可以用了,而这个时钟是默认开启的,所以51单片机无法做到低功耗。

STM32时钟系统主要的目的就是给相对独立的外设模块提供时钟,也是为了降低整个芯片的耗能。时钟树框图见《STM32F4xx中文参考手册》6.2章节

2.在STM32中,有4个时钟源:

① LSI(Low Speed Internal Clock, 低速内部时钟):RC振荡器,频率为32KHz。独立看门狗的时钟源只能是LSI,同时LSI还可以做RTC的时钟源。

② LSE(Low Speed External Clock, 低速外部时钟):接频率为32.768KHz的石英晶体,LSE主要是RTC的时钟源。

③ HSI(High Speed Internal Clock, 高速内部时钟):RC振荡器,频率为16MHz,精度不高

④ HSE(High Speed External Clock, 高速外部时钟):可接石英/陶瓷谐振器,或外接时钟源,频率范围是2MHz~26MHz。(我们的开发板用的是一个8Mhz的晶振)

⑤ PLL(Phase Locked Loop, 锁相环倍频输出):理论上不能算是时钟源,只是接收时钟源后对其进行分/倍频,分/倍频倍数可修改参数调节。(STM32F407ZGT6开发板最大可输出168Mhz)

其中 ③ ④ ⑤ 是来驱动系统时钟 (SYSCLK)的。

Notice: 以上频率仅针对STM32F40x,其它的以数据手册为准

1.HSE 高速外部时钟信号

可以由有源晶振或者无源晶振提供,频率从4-26MHZ 不等,我们的开发板使用的是8MHZ的晶振,当HSE 故障时,高速的内部时钟信号HSI会作为备用的系统时钟,直到HSE恢复正常。

2.锁相环PLL

PLL 的主要作用是对时钟进行倍频,然后把时钟输出到各个功能部件,由HSE 或者HSI 提供时钟输入信号。

主PLL 有两路的时钟输出,第一个输出时钟PLLCLK 用于系统时钟,F407 里面最高是168M。

第二个输出用于USB OTG FS 的时钟(48M)、RNG 和SDIO 时钟(<=48M)。

专用的PLLI2S 用于生成精确时钟,给I2S 提供时钟。

PLLCLK的计算公式为:

VCOCLK_IN = PLLCLK_IN / M 8

VCOCLK_OUT = VCOCLK_IN * N 336

PLLCLK_OUT=VCOCLK_OUT/P 2

3.系统时钟SYSCLK

系统时钟来源可以是:HSI、PLLCLK、HSE,具体的由时钟配置寄存器RCC_CFGR 的SW 位配 置。我们这里设置系统时钟:SYSCLK = PLLCLK =168M。

如果系统时钟是由HSE 经过PLL 倍频 之后的PLLCLK 得到,当HSE 出现故障的时候,系统时钟会切换为HSI=16M,直到HSE 恢复正 常为止。

3.启动文件

提问:在main函数里,我们没有调用任何函数修改时钟参数,那么时钟频率被修改后是怎么生效的呢?

启动文件由汇编编写,是系统上电复位后第一个执行的程序。主要做了以下工作:

  1. 初始化堆栈指针SP=_initial_sp

  2. 初始化PC 指针=Reset_Handler

  3. 初始化中断向量表

  4. 配置系统时钟

  5. 调用C 库函数_main 初始化用户堆栈,从而最终调用main 函数去到C 的世界

4.其他时钟

RTC时钟

RTCCLK 时钟源可以是HSE 1 MHz(HSE 由一个可编程的预分频器分频)、LSE 或者LSI 时钟。 选择方式是编程RCC 备份域控制寄存器(RCC_BDCR) 中的RTCSEL[1:0] 位和RCC 时钟配置寄 存器(RCC_CFGR) 中的RTCPRE[4:0] 位。所做的选择只能通过复位备份域的方式修改。通 常的做法是由LSE 给RTC 提供时钟,大小为32.768KHZ。

独立看门狗时钟

独立看门狗时钟由内部的低速时钟LSI 提供,大小为32KHZ。

I2S时钟

I2S 时钟可由外部的时钟引脚I2S_CKIN 输入,也可由专用的PLLI2SCLK 提供,具体的由RCC 时钟配置寄存器(RCC_CFGR) 的I2SSCR 位配置。

  • 25
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值