首页 > 技术文章 > STM32F10x_StdPeriph_Lib_V3.5.0库与系统滴答定时器(Systick)

swblog 2013-10-02 16:55 原文

在V3.5的库中,关于系统滴答的配置是在core_cm3.h文件中,其代码如下:

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 */
}

关于systick,ST的STM32F10xxx_Reference_Manual文档介绍不多,没有其寄存器的描述说明,只能在Cortex-M3权威指南中找到一些描述。

有四个寄存器,控制寄存器(CTRL)、重装载值寄存器(RELOAD)、当前值寄存器(VAL)、校准值(CALIB).
控制寄存器几个bit的含义是:
第0位:ENABLE,Systick 使能位  (0:关闭Systick功能;1:开启Systick功能)
第1位:TICKINT,Systick 中断使能位    (0:关闭Systick中断;1:开启Systick中断)
第2位:CLKSOURCE,Systick时钟源选择  (0:使用HCLK/8 作为Systick时钟;1:使用HCLK作为Systick时钟)(与具体的芯片实现有关系
第16位:COUNTFLAG,Systick计数比较标志,如果在上次读取本寄存器后,SysTick 已经数到了0,则该位为1。如果读取该位,该位将自动清零

从上面的代码可以看出,V3.5库默认是使用HCLK作为Systick时钟的。如果用Systick来计时一个比较长的值,可以选择使用HCLK/8作为Systick时钟。

推荐阅读