systick滴答定时器

1、概述

SysTick定时器也称为系统滴答定时器或系统定时器,是Cortex-M系列处理器内核集成的一个简单的定时器。SysTcik定时器有两个时钟源,分别是内部时钟(FCLK自由运行时钟,等于系统总线时钟HCLK)和外部时钟(STCLK Cotrtex系统定时器时钟,等于系统总线时钟8分频)。在裸机的情况下,SysTick可以作为一个简单的定时器,来产生一个精准的延时,如果加载了操作系统(如UCOS、Linux以及其他的实时/分时操作系统)SysTick定时器可以作为操作系统的时基单元。

功能:SysTick定时器是一个24位(计算范围0~224-1)倒计数(计数方式为减法)定时器,从预装载值(计数周期)一直计数到0,然后再从重装载寄存器中自动重装载初始值,只要不把SysTick定时器的使能位清除,那么SysTick定时器就永远不停,即使芯片在睡眠模式下也能正常工作。

2、寄存器

2.1 控制以及状态寄存器(SysTick_CTRL)

设置SysTick定时器的工作模式以及计算器的状态标志位。

2.2 重装载值寄存器(SysTick_LOAD)

存放SysTick定时器重装载的初始计数值。

2.3 当前值寄存器(SysTick_VAL)

SysTick定时器倒计数寄存器,对寄存器进行读操作,则返回当前的倒计数值,对寄存器进行写操作时,会把寄存器清零,并且对“到零标志位”同时清零。

2.4 SysTick校准数值寄存器( CALIB)

3、示例

1)选择SysTick定时器的时钟源。

2)确定SysTick定时器的定时时长:根据定时时间的公式计算定时初始值,并把初始值写入重装载寄存器。

3)对当前值计数寄存器清零。

4)启动定时器。

5)等待定时时间到达:轮询到零标志位是否被硬件置1.

6)关闭定时器。

/************************** SysTick定时器微秒延时函数 *******************
参数:us:需要延时的微秒数(1~1864135us)
**********************************************************************/
void SysTick_Delay_us(unsigned int us)
{
    unsigned int Temp = 0;
    
    /* 选择SysTick定时器时钟源 */
    SysTick->CTRL &= ~(1 << 2);       //选择外部时钟
    /* 设定计数初始值 */
    SysTick->LOAD = (72 / 8) * us;   //把延时计数初始值写入自动重装载寄存器
    /* 计数器清零 */
    SysTick->VAL = 0x00;
    /* 启动定时器 */
    SysTick->CTRL |= 1 << 0;          //使能SysTick定时器
    /* 等待时间到达 */
    do
    {
        Temp = SysTick->CTRL;
        
    }while( !(Temp & (1 << 16)) );
    /* 关闭定时器 */
    SysTick->CTRL &= ~(1 << 0);      //清除SysTick定时器使能位
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值