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.

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