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

版权声明:专业游手好闲&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. 编程要点

__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. 实例代码

/**
  * @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);
	}
}

猜你喜欢

转载自blog.csdn.net/XieWinter/article/details/89922176
今日推荐