您的位置:首页 > 其它

秉火429笔记之十一 Systick--滴答定时器

2019-05-07 15:48 302 查看
版权声明:专业游手好闲&LoaferPro https://blog.csdn.net/XieWinter/article/details/89922176

目录

1. 概述

2. 寄存器说明

3. 编程要点

4. 实例代码

SysTick—系统定时器是属于CM4内核中的一个外设,内嵌在NVIC中。系统定时器是一个24bit的向下递减的计数器。所有基于CM4内核的单片机都具有这个系统定时器,使得软件在CM4单片机中可以很容易的移植。系统定时器一般用于操作系统,用于产生时基,维持操作系统的心跳

2. 寄存器说明

  • CTRL  SysTick控制及状态寄存器
位段 名称 类型 复位值 描述
16 COUNTFLAG R/W 0 如果在上次读取本寄存器后, SysTick 已经计到 了 0,则该位为 1。
2 CLKSOURCE R/W 0 时钟源选择位,0=AHB/8,1=处理器时钟AHB
1 TICKINT R/W 0 1=SysTick倒数计数到 0时产生 SysTick异常请 求,0=数到 0 时无动作。也可以通过读取COUNTFLAG标志位来确定计数器是否递减到0
0 ENABLE R/W 0 SysTick 定时器的使能位
  • LOAD  SysTick重装载数值寄存器
  • VAL SysTick当前数值寄存器
  • CALIB SysTick校准数值寄存器(可忽略)

3. 编程要点

[code]__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk)  return (1);      /* Reload value impossible */

SysTick->LOAD  = ticks - 1;                                  /* set reload register */
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Systick Interrupt */
SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */
SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |							       /* CLKSOURCE = AHB */
SysTick_CTRL_TICKINT_Msk   |
SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */
return (0);                                                  /* Function successful */
}

 参照代码可知

  1. 设置重装载寄存器的值
  2. 清除当前数值寄存器的值
  3. 配置控制与状态寄存器(配置时钟源,中断)

4. 实例代码

[code]/**
* @brief  启动系统滴答定时器 SysTick
* @param  无
* @retval 无
*/
void SysTick_Init(void)
{
/* SystemFrequency / 1000    1ms中断一次
* SystemFrequency / 100000	 10us中断一次
* SystemFrequency / 1000000 1us中断一次
*/
if (SysTick_Config(SystemCoreClock / 100000))
{
/* Capture error */
while (1);
}
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: