当前位置: > 华清远见教育科技集团 > 嵌入式学习 > 讲师博文 > 32位滴答定时器的使用一
32位滴答定时器的使用一
时间:2016-12-14作者:华清远见

1、SysTick滴答定时器的用途
        A)裸机程序中可作为独立的延时定时器。
        B)产生操作系统的时钟节拍。
        C)便于不同处理器之间程序移植
        SysTick定时器被捆绑在NVIC中,异常号15
        D)作为一个闹铃测量时间用于测量时间,
        但当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作。

2、配置嘀嗒定时器
        我们定义的48000的装填值,
        SysTick_config(48000);
        嘀嗒定时器是24位,所以先判断给的装填值是否超过24位(0xFFFFFF)。

3、SysTick寄存器
        我们来了解SysTick的实现,其需要4个寄存器。
        SysTick->CSR        控制和状态寄存器
        SysTick->RVR        重装载寄存器
        SysTick->VAL         当前值寄存器
        SysTick->CALIB     校准值寄存器

嘀嗒定时器的系统框图:

4、对滴答定时器的配置
        SysTick异常配置步骤
        1对CTRL//LOAD/VAL三个寄存器进行了配置,
        2初始化SysTick使用的时钟,
        3清除系统当前值,装入重装值,
        4使能SysTick,使SysTick能响应中断

static __INLINE uint32_t SysTick_Config(uint32_t ticks)
        {
                /*****************装填值是否超过大值*******************/
                if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */
                /*****************为什减1,芯片手册给的实例,因为减到0***************/
                SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */
                NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */
                SysTick->VAL = 0; /* Load the SysTick Counter Value */
                SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | //控制和状态
                SysTick_CTRL_TICKINT_Msk |
                SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
                return (0); /* Function successful */
        }

#define __NVIC_PRIO_BITS        2        /*!< Number of Bits used for Priority Levels        */

发表评论
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)