滴答定时器详解

STM32F1滴答定时器的讲解

1.概况

Systick定时器,是一个简单的定时器,对于CM3、CM4内核芯片,都有Systick定时器。Systick定时器常用来做延时,或者实时系统的心跳时钟。这样可以节省MCU资源,不用浪费一个定时器。
Systick定时器就是系统滴答定时器,一个24 位的倒计数定时器,计到0 时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作。

2.使用介绍

本文介绍的滴答定时器主要是用于延时,下面我们通过两种方式来实现延时功能,一种是把滴答定时器当成普通的定时器来使用,另一种是模拟实时操作系统(RTOS),将滴答定时器作为心跳时钟,并采用时间摘取法来获得延时。
特别注意的是在使用过程中,两种方式对于LOAD寄存器写入的值会有区别,具体如下:
The RELOAD value can be any value in the range 0x00000001-0x00FFFFFF. A start value of 0 is possible, but has no effect because the SysTick exception request and COUNTFLAG are activated when counting from 1 to 0.
The RELOAD value is calculated according to its use:
l To generate a multi-shot timer with a period of N processor clock cycles, use a RELOAD
value of N-1. For example, if the SysTick interrupt is required every 100 clock pulses, set
RELOAD to 99.
l To deliver a single SysTick interrupt after a delay of N processor clock cycles, use a
RELOAD of value N. For example, if a SysTick interrupt is required after 400 clock
pulses, set RELOAD to 400.

3.相关寄存器

SysTick有四个寄存器,分别为CTRL(控制与状态寄存器)、LOAD(自动重装载值寄存器)、VAL(当前值寄存器)、CALIB(校准值寄存器)。最后一个校准值寄存器不常用,此处不做介绍,如想了解,可自行查看STM32F103的编程手册,其中4.5小节详细的介绍了相关寄存器及每一位代表的含义。

3.1 CTRL寄存器各位描述

位段 名称 类型 复位值 描述
16 COUNTFLAG R 0 如果在上次读取本寄存器后,SysTick已经数到了0,则该位为1.如果读取该位,该位自动清零。
2 CLKSOURCE R/W 0 0=外部时钟源(STCLK) 1=内核时钟(FCLK)
1 TICKINT R/W 0 1=SysTick倒数到0时产生SysTick异常请求 0=数到0时无动作
0 ENABLE R/W 0 SysTick定时器的使能位

3.2 LOAD寄存器各位描述

位段 名称 类型 复位值 描述
23:0 RELOAD R/W 0 当倒数至0时,将被重新装载的值

3.3 VAL寄存器各位描述

位段 名称 类型 复位值 描述
23:0 CORRENT R/Wc 0 读取时返回当前倒计数的值,写它则使之清零,同时还会清除在CTRL寄存器的COUNTFLAG位

需要注意的是,外部时钟源(STCLK)是HCLK(AHB总线时钟)的1/8,内核时钟(FCLK)是HCLK(AHB总线时钟)。

4.延时实现方式一

4.1滴答定时器初始化

//只需初始化一次即可
static u8  fac_us=0;	//us延时倍乘数
static u16 fac_ms=0;	//ms延时倍乘数

/*
函数功能:延时函数初始化
形参含义:SYSCLK 系统时钟
          SYSCLK单位为MHz
注    意:SysTick的时钟固定为HCLK时钟的1/8
*/
void delay_init(u8 SYSCLK)
{
   
	SysTick->CTRL
  • 8
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值