今天我们来说说SysTick定时器。SysTick定时器在从参考手册中根本没有介绍。我费了九牛二虎之力才在一个犄角格拉里找到SysTick定时器的英文版的说明。在Cotex-M3有介绍,为什么要找STM32的介绍,是因为功能设置上还有点区别。首先看一下SysTick定时器的作用,下面是Cotex-M3里的一段话:SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。例如,为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。Cortex‐M3处理器内部包含了一个简单的定时器。因为所有的CM3芯片都带有这个定时器,软件在不同CM3器件间的移植工作得以化简。该定时器的时钟源可以是内部时钟(FCLK,CM3上的自由运行时钟),或者是外部时钟(CM3处理器上的STCLK信号)。不过,STCLK的具体来源则由芯片设计者决定,因此不同产品之间的时钟频率可能会大不相同,你需要检视芯片的器件手册来决定选择什么作为时钟源。知道我为什么找ST关于SysTick的说明了吧SysTick介绍下面介绍STM32中的SysTick。SysTick部分内容属于NVIC控制部分,一共有4个寄存器,名称和地址分别是:
STK_CSR,0xE000E010—控制寄存器
STK_LOAD,0xE000E014—重载寄存器
STK_VAL,0xE000E018—当前值寄存器
STK_CALRB,0xE000E01C—校准值寄存器
第0位:ENABLE,SysTick使能位(0:关闭Systick功能;1:开启Systick功能)。
第1位:TICKINT,SysTick中断使能位(0:关闭Systick中断;1:开启Systick中断)。
第2位:CLKSOURCE,SysTick时钟源选择(0:使用HCLK/8 作为Systick时钟;1:使用HCLK作为Systick时钟)。
第3位:COUNTFLAG,SysTick计数比较标志,如果在上次读取本寄存器后,SysTick 已经数到了0,则该位为1。如果读取该位,该位将自动清零。
位31 NOREF:1=没有外部参考时钟(STCLK不可用),0=外部参考时钟可用。
位30 SKEW:1=校准值不是准确的1ms,0=校准值是准确的1ms。
位[23:0] :Calibration value。