stm32时钟系统
发布日期:2021-11-15 17:20:07 浏览次数:2 分类:技术文章

本文共 2497 字,大约阅读时间需要 8 分钟。

文章目录

时钟系统的框图
在这里插入图片描述

时钟源

首先,有五个时钟源,图中红框部分

①、HSI(High Speed inter) RC是高速内部时钟RC 振荡器频率为 8MHz(RC振荡器不够稳定)
可以作为系统时钟的选择
在这里插入图片描述
②、HSE(High Speed external) 高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为 4MHz~16MHz
我们的开发板接的是 8M 的晶振。
可以作为第一个选择器选择输入和二分频选择输入
在这里插入图片描述
也可以作为系统时钟的选择
在这里插入图片描述
输出和HSI的二分频作为第二个选择器的选择输入
在这里插入图片描述
输出作为PLL的输入,PLL是锁相环也叫倍频器,可以放大2-16倍的频率
倍频器的输出可以作为系统时钟的选择
css是如果HSE突然出问题,就会自动切换到HSI
在这里插入图片描述

③、LSI (low speed inter)低速内部时钟,RC 振荡器,频率为 40kHz。独立看门狗的时钟源只能是 LSI,同时 LSI 还可以作为 RTC 的时钟源。

在这里插入图片描述

④、LSE 是低速外部时钟,接频率为 32.768kHz 的石英晶体。这个主要是 RTC 的时钟源。

在这里插入图片描述
第一个选择器LSE或LSI或HSE的128分频都可以作为RTC时钟输入

⑤、PLL 为锁相环倍频输出,其时钟输入源可选择为 HSI/2、HSE 或者 HSE/2。倍频可选择为2~16 倍,但是其输出频率最大不得超过 72MHz

在这里插入图片描述

以上是时钟源输入,那么这些给哪些提供时钟信号(时钟应用)
A. MCO 是 STM32 的一个时钟输出 IO(PA8),它可以选择一个时钟信号输出,可以
选择为 PLL 输出的 2 分频HSIHSE、或者系统时钟。这个时钟可以用来给外
部其他系统提供时钟源。
在这里插入图片描述
B.这里是RTC 时钟源,从图上可以看出,RTC 的时钟源可以选择 LSI,LSE,以及HSE 的 128 分频。
在这里插入图片描述
C. 从图中可以看出 C 处 USB 的时钟是来自 PLL 时钟源。STM32 中有一个全速功能的 USB 模块,其串行接口引擎需要一个频率为 48MHz 的时钟源。该时钟源只能从 PLL 输出端获取,可以选择为 1.5 分频或者 1 分频,也就是,当需要使用 USB模块时,PLL 必须使能,并且时钟频率配置为 48MHz 或 72MHz。
在这里插入图片描述
D. D 处就是 STM32 的系统时钟 SYSCLK,它是供 STM32 中绝大部分部件工作的时
钟源。系统时钟可选择为 PLL 输出、HSI 或者 HSE。系统时钟最大频率为 72MHz,
当然你也可以超频,不过一般情况为了系统稳定性是没有必要冒风险去超频的。
AHB预分频,分频因子有9种选择,分别为1,2,4,8,16,64,128,256,512
在这里插入图片描述
E. 这里的 E 处是指其他所有外设了。从时钟图上可以看出,其他所有外设的时钟最终来源都是 SYSCLK。SYSCLK 通过 AHB 分频器分频后送给各模块使用。这些模块包括:
在这里插入图片描述
①、AHB 总线、内核、内存和 DMA 使用的 HCLK 时钟
在这里插入图片描述
②、通过 8 分频后送给 Cortex 的系统定时器时钟,也就是 systick 了。
在这里插入图片描述
③、直接送给 Cortex 的空闲运行时钟 FCLK
在这里插入图片描述
④、送给 APB1 分频器。APB1 分频器输出一路供 APB1 外设使用(PCLK1,最大频率 36MHz),另一路送给定时器(Timer)2、3、4 倍频器使用
在这里插入图片描述
⑤、送给 APB2 分频器。APB2 分频器分频输出一路供 APB2 外设使用(PCLK2,最大频率 72MHz),另一路送给定时器(Timer)1 倍频器使用
在这里插入图片描述

时钟知识总结

1.5个时钟源

外部时钟源:HSE,LSE
HSE来自外接的谐振器或外部时钟源
LSE来自石英晶体
HSI和LSI来源于RC振荡器
PLL来源于HSI/2,HSE或HSE/2

系统时钟来源于三个时钟源HSI,HSE,PLL

2.时钟频率
高速时钟源
HSE:频率范围为4MHz-16MHz
HSI:频率为8MHz
PLL:频率不超过72Mhz
低速时钟源
LSI:频率范围为40khz
LSE:频率范围为32.768khz

3.时钟应用

RTC来源于LSI,LSE或HSE的分频
独立看门狗(IWDG)时钟源只能来自于LSI
USB时钟源来自于PLL
MCO(stm32的一个IO用来时钟输出)时钟源来自PLL/2,HSI,HSE或时钟系统
除了以上的其他所有外设的时钟源都来自系统时钟,而系统时钟来自PLL,HSI或者HSE,不超过72MHZ
在任何一个外设使用之前,必须首先使能相应的时钟

寄存器

RCC相关寄存器配置

在这里插入图片描述
CR是对时钟源使能,使能且等待
在这里插入图片描述
CFGR对选择器进行设置,设置时钟源的选择
在这里插入图片描述

库函数

在这里插入图片描述
几个重要的时钟
SYSCLK(系统时钟)
AHB总线时钟
APB1总线时钟(低速):最高36MHZ
APB2总线时钟(高速):最高72MHZ
PLL时钟

系统时钟初始化函数systeminit()

分析systeminit函数

在这里插入图片描述
1
在这里插入图片描述
在这里插入图片描述
打开8MHZ的振荡器
2.将
在这里插入图片描述
将CFGR的24:27位,0:15位 置 0
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
也就是把SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO全部关掉

在这里插入图片描述

同上

在这里插入图片描述

清掉所有中断

5.SetSysClock()

在这里插入图片描述
在这里插入图片描述
这里的定义决定了上面函数的调用
在这里插入图片描述
在这里插入图片描述
然后是SetSysClockTo72(void)
第一句
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
外部高速时钟使能位打开

然后

在这里插入图片描述
在这里插入图片描述
等待外部高速时钟使能就绪位置1

然后

在这里插入图片描述
如果已经就绪状态位置1
如果状态位置1

在这里插入图片描述

Flash两个等待状态
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
HCLK不分频
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
APB2不分频

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
APB1两分频

在这里插入图片描述

在这里插入图片描述
最后
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使能PLL
在这里插入图片描述
等待使能标志位
在这里插入图片描述
切换PLL作为系统时钟

SetSysClockTo72()函数总过程

首先,打开HSE,然后等待就绪标志位
设置外设和时钟的关系
然后把时钟来源确定好
然后把PLL时钟打开,切换PLL为系统时钟来源

SystemInit()函数全过程

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述



初始化中断自动调用SystemInit();

在这里插入图片描述
系统先执行SystemInit后执行main

转载地址:https://blog.csdn.net/qq_41262681/article/details/94284703 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:数字信号处理第一章 离散时间信号与系统
下一篇:stm32寄存器映射

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月11日 07时23分01秒