系統滴答定時器(SysTick)中斷配置
在STM32標准庫中是通過SysTick_Config()函數配置時鍾中斷的,然后SysTick_Handler()函數自動定時觸發其中的函數。
if(SysTick_Config(SystemCoreClock/1000))
while(1);
////////////////////////////////////////
/* 系統中斷處理函數 */
void SysTick_Handler(void)
{
/* 定義時鍾中斷處理函數 */
}
庫文件中對SysTick_Config()函數的定義如下所示:
__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_Config()函數內部主要是對SysTick寄存器的控制, 最主要是修改其中的重載計數值,然后設置中斷優先級,配置控制寄存器。
- SysTick->CTRL,
控制和狀態寄存器, 位[0]是使能位; 位[1]TICKINT 計數將為0時是否觸發SysTick Handler; CLKSOURCE 時鍾源; COUNTFLAG 計數是否減為0. - SysTick->LOAD,
重裝載寄存器, 作用是當計數減為0時,將特定的初始值裝載到當前值寄存器中。 - SysTick->VAL,
當前值寄存器, 當前計數值,每一次系統中斷就減小1 - SysTick->CALIB,
校准值寄存器