当前位置:
文档之家› Removed_图文详解stm32时钟树
Removed_图文详解stm32时钟树
8MHz * 9 = 72MHz。
3) 时钟到达 AHB 预分频器,由 11 知时钟经过 AHB 预分频器之后的速率仍为 72MHz。
4) 时钟到达 APB2 预分频器,由 15 经过 APB2 预分频器后速率仍为 72MHz。
5) 时钟到达 APB2 总线外设。
因此 STM32 的 APB2 总线外设,所能达到的最大速率为 72MHz。依据以上方法读者可以搜寻出 APB1 总线外
图 1 是 STM32 微控制器的时钟树,表 1 是图中各个标号所表示的部件。
标号
图 1 标号释义
1 内部低速振荡器(LSI,40Khz)
2 外部低速振荡器(LSE,32.768Khz)
3 外部高速振荡器(HSE,3-25MHz)
4 内部高速振荡器(HIS,8MHz)
5 PLL 输入选择位
6 RTC 时钟选择位
7 PLL1 分频数寄存器
8 PLL1 倍频寄存器
9 系统时钟选择位
10 USB 分频寄存器
11 AHB 分频寄存器
12 APB1 分频寄存器
13 AHB 总线
14 APB1 外设总线
15 APB2 分频寄存器
16
APB2 外设总线
17 ADC 预分频寄存器
18 ADC 外设
:50 45. 44. 43. by 42.41.— 4—0.— 3—9.—3—8.by37@.—— 36.35. —34—. ——33.312. 1.2.3.34.0.5.6—.—29.by28.by@27.26.—— 25. 24. 23. 22. by 21.20. — 1—9.by:18.by:17.— 1—6.— 1—5.—1—4.—— 13. 12. 111.0“. ”by: 9M.“OOOKN”b8y.:——7.——6.——5.——4.——3.——2.——1.——
对于广大初次接触 STM32 的读者朋友(甚至是初次接触 ARM 器件的读者朋友)来说,在熟悉了开发环境的 使用之后,往往“栽倒”在同一个问题上。这问题有个关键字叫:时钟树。
众所周知,微控制器(处理器)的运行必须要依赖周期性的时钟脉冲来驱动——往往由一个外部晶体振 荡器提供时钟输入为始,最终转换为多个外部设备的周期性运作为末,这种时钟“能量”扩散流动的路径, 犹如大树的养分通过主干流向各个分支,因此常称之为“时钟树”。在一些传统的低端 8 位单片机诸如 51,AVR,PIC 等单片机,其也具备自身的一个时钟树系统,但其中的绝大部分是不受用户控制的,亦即 在单片机上电后,时钟树就固定在某种不可更改的状态(假设单片机处于正常工作的状态)。比如 51 单 片机使用典型的 12MHz 晶振作为时钟源,则外设如 IO 口、定时器、串口等设备的驱动时钟速率便已经是 固定的,用户无法将此时钟速率更改,除非更换晶振。
3——5——7——21——8——9——11——15——16 对于 3,首先是外部的 3-25MHz(前文已假设为 8MHz)输入;
对于 5, 通过 PLL 选择位预先选择后续 PLL 分支的输入时钟(假设选择外部晶振);
对于 7,设置外部晶振的分频数(假设 1 分频);
对于 21,选择 PLL 倍频的时钟源(假设选择经过分频后的外部晶振时钟);
19 PLL2 分频数寄存器
20 PLL2 倍频寄存器
21 PLL 时钟源选择寄存器
22 独立看门狗设备
23
RTC 设备
图 1 STM32 的时钟树 在认识这颗时钟树之前,首先要明确“主干”和最终的“分支”。假设使用外部 8MHz 晶振作为
STM32 的时钟输入源(这也是最常见的一种做法),则这个 8MHz 便是“主干”,而“分支”很显然是最 终的外部设备比如通用输入输出设备(GPIO)。这样可以轻易找出第一条时钟的“脉络”: 3——5——7——21——8——9——11——13 对此条时钟路径做如下解析: 对于 3,首先是外部的 3-25MHz(前文已假设为 8MHz)输入; 对于 5,通过 PLL 选择位预先选择后续 PLL 分支的输入时钟(假设选择外部晶振); 对于 7,设置外部晶振的分频数(假设 1 分频); 对于 21,选择 PLL 倍频的时钟源(假设选择经过分频后的外部晶振时钟); 对于 8,设置 PLL 倍频数(假设 9 倍频); 对于 9,选择系统时钟源(假设选择经过 PLL 倍频所输出的时钟); 对于 11,设置 AHB 总线分频数(假设 1 分频); 对于 13,时钟到达 AHB 总线; 在上一章节中所介绍的 GPIO 外设属于 APB2 设备,即 GPIO 的时钟来源于 APB2 总线,同样在图 1 中也可以 寻获 GPIO 外设的时钟轨迹:
而 STM32 微控制器的时钟树则是可配置的,其时钟输入源与最终达到外设处的时钟速率不再有固定的 关系,本文将来详细解析 STM32 微控制器的时钟树。
:50 45. 44. 43. by 42.41.— 4—0.— 3—9.—3—8.by37@.—— 36.35. —34—. ——33.312. 1.2.3.34.0.5.6—.—29.by28.by@27.26.—— 25. 24. 23. 22. by 21.20. — 1—9.by:18.by:17.— 1—6.— 1—5.—1—4.—— 13. 12. 111.0“. ”by: 9M.“OOOKN”b8y.:——7.——6.——5.——4.——3.——2.——1.——
对于 8,设置 PLL 倍频数(假设 9 倍频);
对于 9,选择系统时钟源(假设选择经过 PLL 倍频所输出的时钟);
对于 11,设置 AHB 总线分频数(假设 1 分频);
对于 15,设置 APB2 总线分频数(假设 1 分频);
对于 16,时钟到达 APB2 总线;
现在来计算一下 GPIO 设备的最大驱动时钟速率(各个条件已在上述要点中假设):
1) 由 3 所知晶振输入为 8MHz,由 5——21 知 PLL 的时钟源为经过分频后的外部晶振时钟,并且此分频
ห้องสมุดไป่ตู้
数为 1 分频,因此首先得出 PLL 的时钟源为:8MHz / 1 = 8MHz。
2) 由 8、9 知 PLL 倍频数为 9,且将 PLL 倍频后的时钟输出选择为系统时钟,则得出系统时钟为