SysTick定时器总结

SysTick定时器可以用来做延时或者实时系统的心跳时钟,他是一个24位的递减定时器,当计时到0时,将从RELOAD寄存器中自动重装载定时初值,只要不把他在Systick控制及状态寄存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作。
SysTick定时器有4个寄存器,即:控制及状态寄存器、重装载数值寄存器、当前数值寄存器、校准数值寄存器。
在这里插入图片描述
Reload寄存器放重装载值,初值寄存器就是Val,这个Val每个Systick时钟周期会减一,当减到0之后,接着又从这个Reload重装载寄存器加载到当前值寄存器,循环往复。
外部时钟源就是HCLK(AHB总线时钟的1/8),内核时钟是HCLK时钟,通过systick_clksourceconfig()函数来配置时钟源。
重装载数值寄存器是一个24位的寄存器
systick_clksourceconfig()函数,在misc.c文件中,可以选择systick的时钟源。
Systick_Config(uint32_t ticks)//初始化systick时钟为HCLK,并开启中断,在core_cm3.h/core_cm4.h文件中.

void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
{
  /* Check the parameters */
  assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));
  if (SysTick_CLKSource == SysTick_CLKSource_HCLK)
  {
    SysTick->CTRL |= SysTick_CLKSource_HCLK;
  }
  else
  {
    SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;
  }
}

对于M3使用库函数来初始化时钟,如果系统时钟为72M的话,选择8分频就是9M,那么systick时钟就是9M,如果选择HCLK作为systick时钟的话,就是72M。

//开启systick中断、使能systick以及配置好systick中断的时间间隔
//ticks是两个中断的时间间隔,就是说两个中断之间有多少个systick时钟周期
static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{ 
  if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);            /* Reload value impossible */
                                                               
  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 */
}

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值