学习笔记——systick内核定时器的运用

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

要点:3.5版本库中,没有专门对内核systicky有详细的描述,所以对新手来说不能通过查阅stm32f10x_stdperiph_lib_um.chm获得帮助,只能尝试直接操作寄存器,结果非常轻松达到目的,

编程位于最后页

关于SysTick

1、简介

SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。例如,为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。

Cortex‐M3处理器内部包含了一个简单的定时器。因为所有的CM3芯片都带有这个定时器,软件在不同 CM3器件间的移植工作得以化简。该定时器的时钟源可以是内部时钟(FCLK,CM3上的自由运行时钟),或者是外部时钟( CM3处理器上的STCLK信号)。不过,STCLK的具体来源则由芯片设计者决定,因此不同产品之间的时钟频率可能会大不相同,你需要检视芯片的器件手册来决定选择什么作为时钟源。

Cortex-M3 的内核中包含一个SysTick 时钟。SysTick 为一个24 位递减计数器,SysTick 设定初值并使能后,每经过 1 个系统时钟周期,计数值就减1。计数到0 时,SysTick 计数器自动重装初值并继续计数,同时内部的COUNTFLAG 标志会置位,触发中断(如果中断使能情况下)。

在STM32 的应用中,使用Cortex-M3 内核的SysTick 作为定时时钟,设定每一毫秒产生一次中断,在中断处理函数里对N 减一,在Delay(N) 函数中循环检测N 是否为0,不为0 则进行循环等待;若为0 则关闭SysTick 时钟,退出函数。

注:全局变量TimingDelay , 必须定义为volatile 类型, 延迟时间将不随系统时钟频率改变。

2、SysTick包含的寄存器

STM32中的systick,Systick 部分内容属于NVIC控制部分,一共有4个寄存器,名称和地址分别是:

Systick ->CTRL, 0xE000E010 -- 控制寄存器

Systick ->LOAD, 0xE000E014 -- 重载寄存器

Systick ->VAL, 0xE000E018 -- 当前值寄存器

Systick ->CALRB, 0xE000E01C -- 校准值寄存器

(1)STK_CSR控制寄存器,

第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。

如果读取该位,该位将自动清零

(2)STK_LOAD 重载寄存器

Systick是一个递减的定时器,当定时器递减至0时,重载寄存器中的值就会被重装载,继续开始递减。STK_LOAD 重载寄存器是个24位的寄存器最大计数0xFFFFFF。

(3)STK_VAL当前值寄存器

也是个24位的寄存器,读取时返回当前倒计数的值,写它则使之清零,同时还会清除在SysTick 控制及状态寄存器中的COUNTFLAG 标志。

*(4)STK_CALRB 校准值寄存器

这个寄存器好像目前的水平我还用不到,大体意思明白点,把英文说明放这吧:

位31 NOREF :1=没有外部参考时钟(STCLK 不可用)0=外部参考时钟可用

位30 SKEW:1=校准值不是准确的1ms 0=校准值是准确的1ms

位[23:0] :Calibration value

Indicates the calibration value when the SysTick counter runs on HCLK max/8 as external clock. The value is product dependent, please refer to the Product Reference Manual, SysTick Calibration Value section. When HCLK is programmed at the maximum frequency, the SysTick period is 1ms. If calibration information is not known, calculate the calibration value required from the frequency of the processor clock or external clock.

SysTick定时器除了能服务于操作系统之外,还能用于其它目的:如作为一个闹铃,用于测量时间等。要注意的是,当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作。

运用:

首先找到Libraries\CMSIS 中的core_m3.h 在0365行定义了一个结构体

typedef struct

{

__IO uint32_t CTRL;/*!< Offset: 0x00 SysTick Control and Status Register */

__IO uint32_t LOAD;/*!< Offset: 0x04 SysTick Reload Value Register */ __IO uint32_t VAL; /*!< Offset: 0x08 SysTick Current Value Register */

__I uint32_t CALIB;/*!< Offset: 0x0C SysTick Calibration Register */

} SysTick_Type;

然而当要操作其中的结构体成员时,会联想到GPIO 中的

相关文档
最新文档