9 . 时钟系统学习

Posted 技术世界低调点儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了9 . 时钟系统学习相关的知识,希望对你有一定的参考价值。

STM32 时钟树学习记录

时钟树介绍

在STM32 时钟系统中,有5 个重要的时钟源:
分别是LSI、LSE、HSI、HSE、PLL。

  • 按照时钟频率分可分为高速时钟源和低速时钟源,在这5 个中HSI,HSE 以及PLL 属于高速时钟,LSI 和LSE 属于低速时钟。
  • 按照时钟来源可分为外部时钟源和内部时钟源,外部时钟源就是STM32 晶振管脚处接入外部晶振的方式获取时钟源,其中HSE 和LSE 是外部时钟源,其他的是内部时钟源。
  1. HSI 是内部高速时钟,RC 振荡器,频率为8MHz。可作为系统时钟或PLL 锁相环的输入。
  2. HSE 是外部高速时钟,芯片的23 和24 引脚即为外部高速晶振管脚。HSE 可以作为系统时钟和PLL 锁相环输入,还可以经过128 分频后输入给RTC。
  3. LSI 是内部低速时钟,RC 振荡器,频率大约为40K,可供独立看门狗和RTC 使用,并且独立看门狗只能使用LSI 时钟
  4. LSE 是外部低速时钟,通常在管脚上外接一个32.768KHz 的晶振,供RTC使用
  5. PLL 是锁相环,用于倍频输出

上面我们简单介绍了下STM32 的5 个时钟源,那么它们是怎么给其他外设和系统提供时钟的呢?

(A)MCO 是STM32 的一个时钟输出IO,它可以选择一个时钟信号输出,可以选择 PLL 输出的2 分频、HSI、HSE 或者系统时钟。这个时钟可以用来给外部其他系统提供时钟源
(B)RTC 时钟。从图中线的流向可知,RTC 时钟来源可以是内部低速的LSI时钟,外部低速LSE 时钟,还可以通过HSE 128 分频后得到。
(C)USB 时钟。STM32 中有一个全速功能的USB 模块,其串行接口引擎需要一个频率为48MHz 的时钟源,该时钟源只能从PLL 输出端获取,可以选择为1.5 分频或者1 分频,也就是当需要使用USB 模块时,PLL 必须使能,并且PLLCLK 时钟频率配置为48MHz 或72MHz。
(D)SYSCLK 系统时钟。它是STM32 中绝大部分部件工作的时钟源。它的时钟来源可以由HSI、HSE、PLLCLK 提供,相信大家选择STM32F1 这种高级芯片,都希望有一个比较大的时钟频率,因此选择PLLCLK 作为系统时钟。
(E)其他所有外设。从时钟图上可以看出,其他所有外设的时钟最终来源都是SYSCLK。SYSCLK 通过AHB 分频器分频后送给各模块使用。
这些模块包括:
①、AHB 总线、内核、内存和DMA 使用的HCLK 时钟。
②、通过8 分频后送给Cortex 系统定时器时钟,即SysTick。
③、直接送给Cortex 的空闲运行时钟FCLK。
④、送给APB1 分频器。APB1 分频器输出一路供APB1 外设使用(PCLK1,最大频率36MHz),另一路送给定时器(Timer)1、2 倍频使用。
⑤、送给APB2 分频器。APB2 分频器分频输出一路供APB2 外设使用(PCLK2,最大频率72MHz),另一路送给定时器(Timer)1 倍频器使用。
⑥、送给ADC 分频器。ADC 分频器经过2、4、6、8 分频后送给ADC1/2/3 使用,ADC 最大频率14M。
⑦、二分频后送给SDIO 使用。
其中需要理解的是APB1 和APB2 的区别,APB1 上面连接的是低速外设,
包括电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3 等, APB2
上面连接的是高速外设包括UART1、SPI1、Timer1、ADC1、ADC2、GPIO 等。
在时钟树图中我们还可以得到一个重要信息,大多数有关时钟输出部分都有一个使能控制,比如AHB 总线、APB1 外设、APB2 外设、内核时钟等。当需要使用某个时钟的时候一定要开启它的使能,否则将不工作。

时钟相关库函数介绍
当使用一个外设时,必须先使能它的时钟。那么怎么通过库函数使能时钟呢?固件库已经把时钟相关寄存器的使能配置都封装好,放在stm32f10x_rcc.c 和stm32f10x_rcc.h 中。只需要打开stm32f10x_rcc.h 文件,会发现有很多的宏定义和时钟使能函数的声明。这些时钟函数可大致分为三类。

一类是外设时钟使能函数,一类是时钟源和倍频因子配置函数,还有一类是外设复位函数。当然还有几个获取时钟源配置的函数。由于STM32 的外设都是挂接在AHB 和APB 总线上的,所以要使能外设时钟,也就是使能对应外设所挂接的总线时钟。

以上是关于9 . 时钟系统学习的主要内容,如果未能解决你的问题,请参考以下文章

SAMD21时钟配置

如何由晶振产生1HZ的信号

Arduino UNO驱动 Si3531A三通道时钟信号发生器

我画了一块STM32F407的板子,用了16M和32.768两个晶振,调试发现,不焊这两个晶振也能工作,这是为啥

单片机stc12的sysclk系统工作时钟频率是啥来的?

FPGA教程案例9基于vivado核的时钟管理器设计与实现