通过code可以了解是如何设置的1ms的系统滴答中断。
例如假设AHB clock是16M=16000000,那么一个clock时间就是1/16000000,那么1ms是多少个clock呢,是16000个clock。
如何进行编程呢,这里也是有相关的建议编程顺序。
__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这边的寄存器不多,理解起来也比较容易。
工作原理在配置好并使能systick中断之后,就会自动的将LOAD寄存器中的值加载到VAL中,随着clock在count down,当计数减到0时,会触发systick中断。