stm32的时钟树系统十分的复杂,接下来我们将用stm32f103c8t6的单片机来进行学习举例。
一.树的概念
关于树的概念很简单,学过计算机的数据结构朋友应该对于这些很熟悉,可以跳过这些。那么,神马是树呢?
和字面意思一样,树有源,有枝干,营养(数据)从根部传输到茎叶(外设),然后茎叶(外设)又能反哺根部(输出数据),那么我们大概就能明白一个时钟数大概有哪些结构了。
二.内部晶振与外部晶振的选择
对于stm32可以选择内部时钟(RC震荡器),也可以选择外部时钟时钟(外部晶振),在通常情况下我们经常习惯使用外部高速晶振(HSE)来当时钟源,因为比较与内部时钟,外部时钟的稳定性更好一些。但是如果想应用内部时钟的时候,应该注意一下几点
(1)对于100阵脚和144阵脚的产品,OSC-IN应该接地,OSC-OUT应该浮空。
(2)对于小于100阵脚的产品,则有两种接法:
1.OSC-IN和OSC-OUT 分别通过10k的电阻接地,此方法可以提高emc的性能。
2.分别重新映射OSC-IN OSC-OUT到PD0和PD1,在配置PD0以及PD1为推挽输出,并且输出0,此方法相对于方法1,可以减小功耗,并且能够节约两个外部电阻。
3.内部8MHz的RC振荡器的误差在1%左右,内部RC振荡器的精度通常比用HSE要低十倍以上。STM32的ISP就是利用了HSI(内部RC振荡器)
三.时钟源
在32里面,有5个时钟源,分别为HSI HSE LSI LSE PLL
HSI是高速内部时钟,RC振荡器,频率为8MHz。
HSE是高速外部时钟,也是我们经常用的一种时钟,可以接石英谐振器,陶瓷谐振器,或者接外部时钟源,它的频率为4~16MHz。
LSI是内部低速时钟,RC振荡器,频率为40kHz。
LSE是低速外部时钟,接频率为32.768kHz的石英晶体。
PLL为锁相环倍频输出,其时钟的输入源可以选择HSI/2 HSE或者HSE/2。倍频可以选择2~16倍,但是其输出品最大不可以超过72MHz.(具体详细请自行查询官方手册半导小芯-芯片查询工具_芯片替代查询_数据手册查询_规格书查询_datasheet查询_IC查询 (semiee.com))。
四.32的时钟的输入和输出
对于初次接触32的学习者来说,个人认为这部分是很难去理解的一部分知识,为什么要有时钟树,如何掌握它,它是干嘛的。
一个处理器,它的运行必须要有供电,而且要兼具处理数据发射数据的作用,那么处理器的运行就必须依靠与周期行的脉冲信号,这个信号往往是由外部晶振提供,最后转化到多个外设上,这就是时钟数据扩散的路径,相比于一些基础性的51和AVR等单片机,他们的自身的时钟树系统多半是不有用户设置的,时钟树时钟处于某种固定状态,用户无法更改时钟的频率,除非更换晶振。
但32的时钟树有着更灵活的选择,这就意味着32有着更私人化理性化的性能,时钟树输入源和外设处的时钟频率不再有固定关系,所以,学习32必须哟啊理解时钟树的输入输出关系
输入输出之间的路径可以为HSE-PLLXTPRE-PLLSRC-PLLMUL-SW-AHB-APB2.
第二中路径可以为HSE-SW-AHB-APB2等等。。。
就拿第一种的路径举例:
1——输入,外部晶振(HSE),可以选为2~16MHz。
2——第一个分频器PLLXTPRE,可以选择1分频或者2分频。
3——时钟源选择,开关PLLSRC,我们可以选择其输出为外部高速时钟(HSE)或者是内部高速时钟(HSI)。这里选择为HSE.
4——PLL,具有倍频功能(个人感觉和运算放大器好像,2~16倍),经过pll的时钟被称为PLLCLK。倍频因子设定为9倍,也就是说,经过PLL之后8MHz的HSE能变为 72MHz
5——开关SW,经过这个开关就是32的时钟树内部,通过这个开关可以切换SYSCLK的时钟源,可以选择为HSI PLLCLK HSE 我们这里选择PLLCLK,所以为72MHz
6——AHB预分频器(分频系数为1~512),如果选1,则分频系数就是1.
7——APB2预分频器(分频系数为1,2,4,8,16).如果选1,分频系数为1所以APB2(PCLK2)为72MHz。
五.32中几个关于时钟树的相关概念
SYSCLK:系统时钟,大部分器件的始终来源,它由SHB预分频器分配到其他部件。
HCLK:由AHB预分频器直接输出得到,他是AHB的时钟信号,提供给储存器。DMA以及Cortex内核,是Cortex内核运的时钟,CPU的主频就是这个信号,它与32的运算速度密切相关。
FCLK:同样由AHB预分频输出得到,是内核的“自由运行时钟”,它的自由表现在他不来自HCLK,因此在HCLK时钟停止FCLK也会继续运行,它的存在,保证了处理器休眠时候,也能够采样中断和跟踪休眠事件,他与HCLK相互同步。
PCLK1:外部时钟,由APB1预分频器输出得到,最大频率为36MHz,要提供给APB1总线上的外设(低速外设)
PCLK2:同上,频率为72,为APB2总线上的外设提供(高速外设)。
粗略如上,想要详细数据请详见官方手册,有错误望请更正。
以上图片截于官方手册。