第一范文网 - 专业文章范例文档资料分享平台

Systick 定时器

来源:用户分享 时间:2025/7/18 9:27:57 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

Systick 定时器

一、 Systick定时器

Systick是一个定时器而已,只是它放在了NVIC 中,主要的目的是为了

给操作系统提供一个硬件上的中断(号称滴答中断)。没有学过操作系统的同学, 可能会很郁闷,啥叫滴答中断?这里来简单地解释一下:操作系统进行运转的时候,也会有“心跳”。它会根据“心跳”的节拍来工作,把整个时间段分成很多小小的时间片,每个任务每次只能运行一个“时间片”的时间长度就得退出给别的任务运行,这样可以确保任何一个任务都不会霸占整个系统不放。这个心跳,可以通过定时器来周期性触发,而这个定时器就是systick。很明显,这个“心跳” 是不允许任何人来随意地访问和修改的。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息。 二、systick编程

现在我们想通过Systick 定时器做一个精确的延迟函数,比如让LED 精确延迟1 秒钟闪亮一次。

思路:利用systick 定时器为递减计数器,设定初值并使能它后,它会每个系统时钟周期计数器减1,计数到0 时,SysTick 计数器自动重装初值并继续计数,同时触发中断。

那么每次计数器减到0,时间经过了:系统时钟周期* 计数器初值。我们使用

72M 作为系统时钟,那么每次计数器减1 所用的时间是1/72M,计数器的初值如果是72000,那么每次计数器减到0,时间经过(1/72M) * 72000 = 0.001m,即1ms。

三、Systick相关寄存器

(1)系统时钟节拍控制与状态寄存器(Systick_CTRL) 位名称 段 类型 复位值 16 COUNTFLAG R 0 从上次读取定时器开始,如果定时器计数到0,则返回1.读取时清零 2 CLKSOURCE R/W 0 0=外部时钟源(STCLK) 1=内核时钟(FCLK) 1 TICKINT R/W 0 1=SysTick 倒数到 0 时会导致挂起Systick处理器 0=数到 0 时不会导致挂起Systick处理器。软件可以使用 COUNTFLAG 来判断是否计数到0 0 ENABLE R/W 0 1=SysTick 计数器工作在连拍模式。即计数器装载重装值后接着开始往下计数。计数到0时将COUNTFLAG设为1,此时根据TICKINT的值可以选择是否挂起Systick处理器。接着又再次装载重装值,并重新开始计数。 0=失能计数器

(2)系统时钟节拍(SysTick)重装值寄存器(SysTick_LOAD)

描述 在计数器到达 0 时,使用 SysTick 重装值寄存器来指定载入“当前值寄存器”的初始值。 初始值可以是 1 到 0x00FFFFFF 之间的任何值。

因此,作为一个连拍式(multi-shot)定时器,它每 N+1 个时钟脉冲就触发一次,周而复始,此处 N为 1 到 0x00FFFFFF 之间的任意值。所以,如果每 100 个时钟脉冲就请求一次 时钟中断(tick interrupt) ,那么必须向 RELOAD 载入 99。如果每次时钟中断后都写入一个新值, 那么可以看作单拍(single shot)模式,因而必须写入实际的倒计数值。例如,如果在 400 个时 钟脉冲后想请求一个时钟中断(tick) ,那么必须向 RELOAD 写入 400。 (3)SysTick当前数值寄存器(Systick_VAL)

只有当VAL 值为0 时,计数器自动重载RELOAD。 位段 名称 类型 复位值 23:0 CURRENT R/Wc 0 读取时返回当前倒计数的值,写它则使之清零,同时还会清除在 SysTick 控制及状态寄存器中的COUNTFLAG标志 (4)SysTick校准数值寄存器(Systick_ CALIB)

使用系统时钟节拍(SysTick)校准值寄存器通过乘法和除法运算可以将寄存器调节成任意所需的时钟速率。

在ST公司官网上下载的STM32F10x_StdPeriph_Lib_V3.5.0标准库里面关于SysTick的库函数只有两个:

(1)一个在msic.h中:主要用来配置systick的时钟源

描述 SysTick_CLKSource:systick的时钟源主要取值有两个: ① SysTick_CLKSource_HCLK_Div8: AHB clock divided by 8

selected as SysTick clock source

② SysTick_CLKSource_HCLK: AHB clock selected as SysTick

clock source

void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource) {

/* Check the parameters */

assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource)); if (SysTick_CLKSource == SysTick_CLKSource_HCLK) {

SysTick->CTRL |= SysTick_CLKSource_HCLK; } else {

SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8; } }

(2)一个在core_m3.h中

/* SysTick Control / Status Register Definitions */ 定义COUNTFLAG在SysTick_CTRL寄存器中的位置

#define SysTick_CTRL_COUNTFLAG_Pos 16

搜索更多关于: Systick 定时器 的文档
Systick 定时器.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c72kfe05mo20a6ri16zob_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top