在 core_cm3.h 定义了一个 Systick_Config()的初始化函数:
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 定时器的中断函数它也帮你写好了,只是定义了 一个空的中断函数,它的中断函数在 stm32f10x_it.c中。
|