STM32 的Systick操作
首先需要知道的是:
1)STM32的核心是Cortex-M3, 而Systick則是屬於Cortex-M3的核心的。
2)Systick為核心提供系統時鐘用,比如可以用來作為作業系統的滴答時鐘。更多作用可以參考《ARM v7-M Architecture ReferenceManual》
3)Systick是個遞減計數器,當計數值遞減為0時可以產生Exception中斷,中斷號為15.
4)Systick相關的暫存器有4個。參考《ARMv7-M Architecture Reference Manual》
5)Systick的控制與狀態暫存器SYST_CSR的CLOCKSOURCE可以選擇外部參考時鐘(external reference clock)也可以選擇核心時鐘(core clock).核心時鐘是肯定可以選擇的(在STM32中這個核心時鐘就是System 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 Reference Manual》
《Reference Manual_STM32L100xx, STM32L151xx, STM32L152xx and STM32L162xx advanced ARM_-based 32-bit MCUs》