今天想了解下STM32的SysTick定时器,结果在用户手册了一直没有找到关于SysTick定时器的说明,我杯具了,而在固件库使用手册里是有相关库函数的说明的。后面我在网上一查,好像很多网友都在抱怨ST太“变态”,用户手册写的相当的不专业,很多该介绍的没有介绍。
当然我还是找到了STM32里关于SysTick定时器的介绍。原来SysTick定时器被捆绑在NVIC中,而且它是Cortex‐M3处理器内部的,也就是说所有以Cortex‐M3为内核的处理器都带有这个SysTick定时器,只是不同的芯片时钟源可能不一样。下面是资料中对它的说明。
Cortex‐M3处理器内部包含了一个简单的定时器。因为所有的CM3芯片都带有这个定时器,软件在不同 CM3器件间的移植工作得以化简。该定时器的时钟源可以是内部时钟(FCLK,CM3上的自由运行时钟),或者是外部时钟( CM3处理器上的STCLK信号)。不过,STCLK的具体来源则由芯片设计者决定,因此不同产品之间的时钟频率可能会大不相同,你需要检视芯片的器件手册来决定选择什么作为时钟源。
下面介绍STM32中的SysTick定时器,Systick 部分内容属于NVIC控制部分,一共有4个寄存器,名称和地址分别是:
STK_CSR, 0xE000E010 -- 控制寄存器
STK_LOAD,
0xE000E014 -- 重载寄存器
STK_VAL,
0xE000E018 -- 当前值寄存器
STK_CALRB, 0xE000E01C -- 校准值寄存器
在V3.0.0固件库中core_cm3.h里面有一个关于SysTick定时器的函数 static __INLINE uint32_t SysTick_Config(uint32_t ticks);
这个函数的功能包括了选择时钟源(内核时钟),开SysTick定时器中断请求,SysTick定时器使能,以及通过参数ticks设置中断时间。
而misc.c中有个函数
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
用于选择选择时钟源,这个函数我觉得实在是多余,费解啊。