STM32 时钟随笔

红叶何时落水

什么是时钟?通俗的的来说,时钟是一个系统的最小时间单位。它并不是用来提供能量的器件,他就像是我们生活中的秒表,以固定的频率一秒一秒的走着。而我们每做一件事都可以说是花费了几秒时间。(不存在零点几秒,它是一个系统的最小时间单位)。

在单片机里面通常有4个时钟源,分别是

HSI 振荡器时钟 (高速内部时钟)8M
HSE 振荡器时钟 (高速外部时钟)外接一个晶振电路
LSI 振荡器时钟 (低速内部时钟)40k
LSE 振荡器时钟 (低速外部时钟)32.768k
其中,一般情况下我们使用外部HSE 振荡器时钟来作为我们的系统时钟。它可以用来驱动APB,DMA,Cortex等系统。
而低速时钟一般用于驱动RTC。

 首先,HSI振荡器时钟 (高速内部时钟)8M

从图中可以看到HSI分为两路输出

第一路 直接作为系统时钟输出

此时,系统时钟最大为8M

第二路 2分频后,进入PLL进行倍频,然后再输出

二分频后,8M / 2 = 4M

倍频后 最大倍频倍数为16倍   4M * 16 = 64M

这个时钟源是封装在芯片内部的,由内部8MHzRC振荡器产生。精度不咋地。

HSE振荡器时钟 (高速外部时钟)4M~16M

我们需要在外部接一个晶体/陶瓷谐振器(HSE晶体)

从图中可以看出它分为了4路输出

第一路 直接作为系统时钟输出,同时会被CSS监控

CSS是时钟安全系统

它的作用是用来监控HSE是否正常工作,一旦HSE出现异常,他会自动将系统时钟切换到HSI,以此来保证系统不会崩溃。

它可以通过软件激活,在HSE启动延时后使能,并与其保持同步。

HSE出事后,会通过高级定时器产生CSSI时钟安全中断。等待NMI处理完成后设置(RCC_CIR)里的CSSC位来清除CSS中断

第二路 和 第三路 直接进入PLL或二分频后进入PLL进行倍频后输出
一般外接8M晶振是,系统会默认是9倍频,系统时钟为72M。
如果想超频的话,理论上改为16倍频,系统时钟为128M。
第四路 128分频后,作为RTC的时钟输出
为什么要128分频呢?低功耗状态下没必要太高时钟。

PLL

倍频倍数的设置在system_stm32f10x文件里面执行,这个文件是在主函数之前执行的,他会配置好系统时钟,这就意味这,系统时钟一旦配置好,就不可以在主函数里面修改。
system_stm32f10x中通过SystemInit()函数来对时钟源进行初始化
首先使能HSI时钟,等到他稳定后,通过 RCC_CR与RCC_CFGR寄存器来对外部时钟和PLL进行配置。
RCC_CR时钟控制寄存器
例如 位0与位1
位0  内部高速时钟使能
当从待机和停止模式返回或用作系统时钟的外部 4-16MHz 振荡器发生故障时,该位由硬件置 ’1’
来启动内部 8MHz RC 振荡器。当内部 8MHz 振荡器被直接或间接地用作或被选择将要作为系
统时钟时,该位不能被清零。
0 :内部 8MHz 振荡器关闭;
1 :内部 8MHz 振荡器开启。
位1 内部高速时钟就绪标志
由硬件置 ’1’ 来指示内部 8MHz 振荡器已经稳定。在 HSION 位清零后,该位需要 6 个内部 8MHz
荡器周期清零。
0 :内部 8MHz 振荡器没有就绪;
1 :内部 8MHz 振荡器就绪。
其他位看数据手册,都差不多,使能时钟源
RCC_CFGR时钟配置寄存器
功能为选择到底是用哪个时钟源,以及倍频倍数是多少。上面每一个时钟源都有多路可以选择,但最终只是用一路。这个寄存器就是从中选择一路作为系统时钟。
例如  1:0
SW[1:0](就是上面那张图中的竖着放着的梯形(多选一逻辑电路)) :系统时钟切换 (System clock switch)
1:0
由软件置 ’1’ 或清 ’0’ 来选择系统时钟源。
在从停止或待机模式中返回时或直接或间接作为系统时钟的 HSE 出现故障时,由硬件强制选择
HSI 作为系统时钟 ( 如果时钟安全系统已经启动 )
00 HSI 作为系统时钟;
01 HSE 作为系统时钟;
10 PLL 输出作为系统时钟;
11 :不可用。
通过配置上面那些寄存器基本可以将系统时钟完成
剩下的外设时钟便可以在主函数里面配置寄存器完成
其中,APB1和APB2都分为两路,一路用来挂载外设,另一路用来挂载定时器
并且定时器与外设时钟虽然都是由APB分频而来,但其时钟频率并不是一定相同。
例如APB1外设时钟最大为36M,但是TIM2~TIM7这些定时器时钟依旧为72M.
原因为定时器时钟经过了二倍频,而这个二倍频开启的条件就是APB分频系数不是1的时候就开启。APB1为二分频,所以36M*2=72M;APB2为1分频,72M*1=72M;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红叶落水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值