首先需要知道的是:
1)STM32的内核是Cortex-M3, 而Systick则是属于Cortex-M3的内核的。
2)Systick为内核提供系统时钟用,比如可以用来作为操作系统的滴答时钟。更多作用可以参考《ARM v7-M Architecture ReferenceManual》
3)Systick是个递减计数器,当计数值递减为0时可以产生Exception中断,中断号为15.
4)Systick相关的寄存器有4个。
5)Systick的控制与状态寄存器SYST_CSR的CLOCKSOURCE可以选择外部参考时钟(external reference clock)也可以选择内核时钟(core clock).内核时钟是肯定可以选择的,而外部时钟是否有则是又具体的实现则是根据厂家来的,比如在STM32L152中,这个外部时钟是AHB clock (HCLK) / 8. 具体参考《Reference Manual_STM32L100xx, STM32L151xx, STM32L152xx and STM32L162xx advanced ARM_-based 32-bit MCUs》128页。
6)具体配置函数,在core_cm3.h中有SysTick_Config()函数用于配置Systick。
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) { return (1UL); } /* Reload value impossible */
SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */
NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
SysTick->VAL = 0UL; /* 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 (0UL); /* Function successful */
}
备注:
本文Systick的更多详细内容参考文献:
《ARM v7-M Architecture ReferenceManual》
《Reference Manual_STM32L100xx, STM32L151xx, STM32L152xx and STM32L162xx advanced ARM_-based 32-bit MCUs》
原文地址:http://11225176.blog.51cto.com/11215176/1826745