SysTick系统时钟定时器
目录
SysTick是一个系统时钟定时器,属于ARM Cortex-Mx内核的一个“内设”,所有基于此内核的微控制器都带SysTick。(ST的芯片中F1系列属于Cortex-M3内核,F3与F4系列属于Cortex-M4内核)。
1、什么是时钟
关于这个问题 ,我们需要从 CPU 的时钟说起。
计算机是一个十分复杂的电子设备。它由各种集成电路和电子器件组成,每一块集成电路中都集成了数以万计的晶体管和其他电子元件。这样一个十分庞大的系统,要使它能够正常地工作,就必须有一个指挥,对各部分的工作进行协调。各个元件的动作就是在这个指挥下按不同的先后顺序完成自己的操作的,这个先后顺序我们称为时序。
时序是计算机中一个非常重要的概念,如果时序出现错误,就会使系统发生故障,甚至造成死机。那么是谁来产生和控制这个操作时序呢?这就是“时钟”。
“时钟”可以认为是计算机的“心脏”,如同人一样,只有心脏在跳动,生命才能够继续。不要把计算机的“时钟”等同于普通的时钟,它实际上是由晶体振荡器产生的连续脉冲波,这些脉冲波的幅度和频率是不变的,这种时钟信号我们称为外部时钟。它们被送入 CPU 中,再形成 CPU 时钟。不同的 CPU,其外部时钟和 CPU 时钟的关系是不同的。
CPU 的时钟周期通常为节拍脉冲或T周期,它是处理操作的最基本的单位。
在微程序控制器中,时序信号比较简单,一般采用节拍电位——节拍脉冲二级*。就是说它只要一个节拍电位,在节拍电位又包含若干个节拍脉冲(时钟周期)。节拍电位表示一个CPU周期的时间,而节拍脉冲把一个CPU周期划分为几个较小的时间间隔。根据需要,这些时间间隔可以相等, 也可以不等。
指令周期是取出并执行一条指令的时间。指令周期常常有若干个CPU周期,CPU周期也称为机器周期,由于CPU访问一次内存所花费的时间较长,因此通常用内存中读取一个指令字的最短时间来规定CPU周期。这就是说,一条指令取出阶段(通常为取指)需要一个CPU周期时间。而一个CPU周期时间又包含若干个时钟周期(通常为节拍脉冲或T周期,它是处理操作的最基本的单位)。这些时钟周期的总和则规定了 一个CPU周期的时间宽度。
总结:1个指令周期包含若干个机器周期,1个机器周期又包含了若干个时钟周期,指令周期 > 机器周期 > 时钟周期
2、STM32的时钟
明白了什么是时钟之后,我们来分析一下STM32芯片的时钟。
STM32对于系统时钟提供多种选择。在STM32中,有五个时钟源,为 HSI、HSE、LSI、LSE、PLL,它们都可以作为系统时钟的来源:
系统时钟的选择是在启动时进行,复位时内部 8MHZ 的 RC 振荡器被选为默认的 CPU 时钟,随 后可以选择外部的、具失效监控的 4-16MHZ 时钟;当检测到外部时钟失效时,它将被隔离,系统将 自动地切换到内部的 RC 振荡器。
2.、HSE 是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为 4MHz~16MHz
3、LSI 是低速内部时钟,RC 振荡器,频率为 40kHz,可以用于驱动独立看门狗和通过程序选择驱动 RTC(RTC 用于从停机/待机模式下自动唤醒系统)
4、LSE 是低速外部时钟,接频率为 32.768kHz 的石英晶体,也可以被用来驱动 RTC
5、PLL 为锁相环倍频输出,其时钟输入源可选择为 HSI/2、HSE 或者 HSE/2。倍频可选择为 2~16 倍, 但是其输出频率最大不得超过 72MHz