[ M3 LN ] STM32F10XXX(Cortex

1 概念(1) 时钟源与时钟信号

时钟信号是指有固定周期并与运行无关的信号量,它用于决定逻辑单元中的状态何时更新。如时钟边沿触发信号意味着所有的状态变化都发生在时钟边沿到来时刻。在边沿触发机制中,只有上升沿或下降沿才是有效信号,才能控制逻辑单元状态量的改变。至于到底是上升沿还是下降沿作为有效触发信号,则取决于逻辑设计的技术。

(2) 时钟信号的作用

在“PN0003 STM32F10XXX(Cortex-M3) MDK-RAM 点亮流水灯 笔记”中有抽象的提到关于时钟信号的作用。用一个较实际的例子来说明时钟信号的作用应该会让人觉得更为亲切:计数器只有在有效驱动时钟信号(如上升沿)CK_CNT到来时才发生计数操作。CK_CNT的频率(如1MHZ)决定了计数器计数一次所花的时间t1(1us)。若计数1000次发生了溢出/下溢从而间接的决定时基的大小1ms,由多个时基从而就可以得到现实生活中的10ms,1s之类的时间段了。时钟驱动计数器见《RM008stm32f10xx参考手册》 Page255 图99 ~ 106。

(3) 外部时钟与内部时钟

外部时钟在芯片外部通过芯片引脚和内部电路发生关系。外部时钟信号可由外部晶体或外部时钟源提供,外部晶体为震荡模式,是使用片内震荡电路和外部接的晶体来产生时钟信号,外部时钟源是一个可以产生时钟信号的器件,比如时钟发生器。

2 读时钟树图

跟时钟相关的模块都被集中到了“时钟树图”之上,所以学会读“时钟树图”还稍带必要性。就像“每次”到食堂吃早饭一样,吃鸡蛋之前都要先喝几口粥,但也不能将粥都先喝完了,不然后面吃鸡蛋的时候会被哽噎到。“时钟树图”就是那碗粥。

系统时钟 (SYSCLK)是核心。因为片内太多模块的时钟信号都是从这里“散发”出去的,它散发到需要时钟信号的每一个模块形成新的时钟信号以驱动这些模块工作。但SYSCLK并非就是由某个时钟源头发出时钟信号,它的来由可以来自“几大”时钟信号,再追踪这“几大”时钟信号就能够追踪到时钟源了。追踪到时钟源就差不多了,因为那已经是硬件成分了。可以在PCB原理图的时候仔细研究一下子,将其原理搞清楚。

以下面的时钟图(摘自STM32F10XXX参考手册)并以SYSCLK为线索了解一下时钟,一个方面是向前追踪到各模块的时钟信号,另一个方向是往回追踪直到时钟源。

Figure1:时钟树

(1) SYSCLK去处

Figure 1时钟树的SYSCLK时钟信号在深红色方框处。它的去处分为如图所示的1,2两个方向。假设SYSCLK已经存在(已经有了时钟信号)。

[1] 去往I2Sx[x=2,3]

暂且不管I2Sx模块具体是什么。因为这里我只关心SYSCLK时钟去处为I2SxCLK,从图中可以看出SYSCLK直接作为了I2SxCLK。当然作为外设,在配置好SYSCLK的情况下,还需要使能I2SxCLK时钟后才能使用I2SxCLK时钟信号。

[2] 去往AHB预分频器SYSCLK的第二个去向就是AHB预分频器,AHB预分频器可对SYSCLK时钟进行1,2…,512分频。经AHB预分频器分频后的时钟信号会去往以下模块:从时钟图中可以看出来,除了至Cortex系统时钟之外的信号在使用前都需要做使能操作。其中APB1外设和APB2外设在图中并没有体现。但对于编写程序来说还不是很重要,因为我们暂时只需要知道使能各个模块时钟的寄存器为RCC_APBxENR。

(2) SYSCLK来源

SYSCLK最大允许的频率为72MHz。

SYSCLK的来源在时钟树中用粉红色方框标记。从图中可以看出,SYSCLK来源于时钟源(除PLL):

系统复位后,HSI振荡器被选为系统时钟。当时钟源被直接或通过PLL间接作为系统时钟时,它将不能被停止。 只有当目标时钟源准备就绪了(经过启动稳定阶段的延迟或PLL稳定),从一个时钟源到另一个时钟源的切换才会发生。在被选择时钟源没有就绪时,系统时钟的切换不会发生。直至目标时钟源就绪,才发生切换。 在时钟控制寄存器(RCC_CR)里的状态位指示哪个时钟已经准备好了,哪个时钟目前被用作系统时钟。

(3) 其它时钟源

(4) 时钟总结

3 时钟初始化配置

时钟初始化配置主要配置“SYSCLK的来源(HIS OrHSE Or PLL(HIS/2 Or HSE))”以及“各模块时钟源频率(HCLK[AHB分频], PCLKx)”。

假设现在要将SYSCLK配置为72MHz,PCLKx频率也为最大时就只能选择HSE作为PLL时钟的输入,再选用经倍频后的PLL时钟作为SYSCLK时钟来源,并设置AHB预分频器分频系数为1,限制PCLK1的时钟频率最大为36MHz。在这个过程中需要配置的寄存器为:

RCC_CR: 含HSE、HLI、PLL时钟的开启位及三大时钟的稳定状态指示位,及HLI的校准位。RCC_CFGR: 含“系统时钟源状态位”、“系统时钟选择位”、“PLL时钟来源位”、“PLL时钟输出倍频位”及“其它时钟(HCLK、HSE、PCLKx)分频系数位”。

在进行这些配置的时候需要将相关的配置寄存器都设成复位时的状态,以方便后续“开启HSE”、“设置PCLKx、HCLK分频”、“选择SYSCLK时钟源”配置。

(1) 时钟复位设置RCC时钟在系统复位时的默认配置。

那我想明天可以是我的来世。

[ M3 LN ] STM32F10XXX(Cortex

相关文章:

你感兴趣的文章:

标签云: