SysTick.

作者: 圆肩男孩 | 来源:发表于2020-08-15 21:33 被阅读0次

SysTick:

系统定时器,24位,只能递减,存在于内核中,嵌套在NVIC中,所有的Cortex-M内核的单片机都有这个定时器.

功能框图

Counter(计数器)(STK_VAL)在时钟的驱动下,从reload(STK_LOAD)初值开始往下递减计数到0,产生中断和置位COUTFLAG标志,然后又从reload的值开始重新递减技术,如此循环.

相关寄存器

16:COUTFLAG:

倒计时到0时会被置1,读取后会被清0

2:CLKSOURCE:

0 = AHB/8
1 = 处理器时钟AHB

1:TICKINT:

1:倒计数到0时产生SysTick异常请求
0:无动作

0:ENABLE

使能或失能定时器

23:0RALOAD:24位

23:0CURRENT

读取时返回当前倒计数的值,写它则使之清0

T = reload × (1/clk)

SysTick寄存器结构体
core_cm3.h

typedef struct
{
//控制及状态寄存器
    __IO uint32_t  CTRL;
//重装载数值寄存器
    __IO uint32_t  LOAD;
//当前数值寄存器
    __IO uint32_t  VAL;
//校准寄存器
    __IO uint32_t  CALIB;
}SysTick_Type;

系统滴答定时器

void SysTick_Delay_us(uint32_t us)
{
    uint32_t i;
    SysTick_Config(72);
    
    for(i=0; i<us; i++)
    {
        //16:COUTFLAG:倒计时到0时会被置1,读取后会被清0
                while( !((SysTick->CTRL) & (1<<16)) );
    }
    //关闭定时器,(可以不关闭)
    SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
}

void SysTick_Delay_ms(uint32_t ms)
{
    uint32_t i;
    SysTick_Config(72000);
    
    for(i=0; i<ms; i++)
    {
        while( !((SysTick->CTRL) & (1<<16)) );
    }
    
    SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
}

相关文章

  • SysTick.

    SysTick: 系统定时器,24位,只能递减,存在于内核中,嵌套在NVIC中,所有的Cortex-M内核的单片机...

网友评论

      本文标题:SysTick.

      本文链接:https://www.haomeiwen.com/subject/dzjgdktx.html