学习笔记:STM32的SysTick定时器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学习笔记:STM32的SysTick定时器SysTick定时器是一个系统定时器,该定时器是个24位的倒计数定时器,该定时器的最
大用处在于可以提供一个操作系统任务切换所需要的“时钟滴答”。

该定时器是STM32中功能最简单的定时器,提供倒计数、中断两个功能,类似与8051的定时器。

SysTick是包含在Cortex-M3内核中的一个简单的定时器。

因为所有的CM3芯片都带有这个定时器,软件在不同芯片生产厂商的CM3器件间的移植工作就得以简化。

该定时器的时钟源可以是内部时钟(FCLK,CM3上的自由运行时钟),或者是外部时钟(CM3处理器上的STCLK信号)。

不过,STCLK的具体来源则由芯片设计者决定,因此不同产品之间的时钟频率可能大不相同。

因此,需要阅读芯片的使用手册来确定选择什么作为时钟源。

在STM32中SysTick以外部时钟HCLK(AHB时钟)或HCLK/8作为运行时钟。

SysTick工作分析
SysTick是一个24位的定时器,即一次最多可以计数2^24个时钟脉冲,这个脉冲的计数值被保存到当前计数值寄存器STK_VAL中,只能向下计数,每接收到一个时钟脉冲STK_VAL 的值就向下减1,直到为0。

当STK_VAL的值被减至0时,由硬件自动把重载寄存器STK_LOAD 中保存的数值加载到STK_VAL中,STK_VAL又重新向下计数……当使能中断时,STK_VAL的值减至0时,触发中断,就可以在中断服务函数中处理定时事件了。

当然,要使SysTick进行以上工作必须要进行SysTick配置。

它的控制配置很简单,只有三个控制位和一个标志位,都位于寄存器STK_CTRL中。

STK_CTRL是一个32位的寄存器,该寄存器与SysTick有关的位分别为Bit0(ENABLE)、Bit1(TICKINT)、Bit2(CLKSOURCE)、Bit16(COUNTFLAG)。

Bit0(ENABLE):SysTick的使能位,此位为1的时候使能SysTick定时器,为0的时候关闭SysTick定时器。

Bit1(TICKINT):中断使能位,为1开启中断,为0关闭中断。

Bit2(CLKSOURCE):SysTick的时钟信号源选择位,为1时AHB为时钟源,为0时AHB/8为时钟源。

Bit16(COUNTFLAG):计数减至0时的标志位,若STK_VAL计数至0,此标志位会被置1,置1后会被自动清0。

还有个与该定时器有关的寄存器STK_CALIB,是用于校准的,不常用。

SysTick定时器用于查询法延时
寄存器操作:
寄存器操作要用到三个寄存器STK_CTRL、STK_VAL、STK_LOAD。

步骤如下:①选择Systick 的时钟源,即配置寄存器STK_CTRL的Bit2。

②加载计数重载值,即配置寄存器STK_LOAD。

③清零STK_VAL寄存器。

④使能定时器,即使能寄存器STK_CTRL的Bit0位。

⑤程序中查询标志位是否置1,不用清零,会自动清零。

库函数操作:
库函数操作要用到的函数只有两个:SysTick_CLKSourceConfig()、SysTick_Config()。

这两个函数分别位于头文件misc.h和core_cm3.h中。

SysTick_CLKSourceConfig():功能只有一个,配置SysTick的时钟源。

SysTick_Config():此函数的功能为加载寄存器STK_LOAD的初值(该函数的形参)、清零STK_VAL寄存器、使能定时器。

即除了配置定时器时钟源外,其他功能都在这个函数中实现。

接下来同样也是在程序中用查询法判断标志位是否置1,但不用清零,会自动清零。

SysTick定时器的中断功能
SysTick定时器的中断功能与51一样,要使用中断功能,在定时器功能下,只需要打开寄存器STK_CTRL的Bit1位,即Bit1(TICKINT):中断使能位。

只不过不同的是在库函数中该定时器的中断服务函数SysTick_Handler()已经默认定义好了,在stm32f10x_it.c文件中,一开始时这个函数是空的,我们可以直接在这个函数里写该定时器的中断程序。

相关文档
最新文档