Systick系统定时器是内核的24位定时器,只能够递减,嵌套在NVIC中,所有的Cortex-M内核的单片机都具有这个定时器,系统嘀嗒校准值固定为9000,当系统嘀嗒时钟设定为9MHz(HCLK/8的大值),产生1ms时间基准
功能框图如下:
下面是SysTick 控制和状态寄存器,只有0,1,2,16这四个位有效
Systick的时钟源可以选择AHB/8或者AHB
Systick寄存器操作如下
SysTick定时时间计算,最好设置成毫秒级别,防止中断的频繁切换
在core_cm3.h里面查看SysTick_Type的定义,因为SysTick属于内核的外设,
/** @addtogroup CMSIS_CM3_SysTick CMSIS CM3 SysTick
memory mapped structure for SysTick
@{
*/
typedef struct
{
__IO uint32_t CTRL; /*!< Offset: 0x00 SysTick Control and Status Register */
__IO uint32_t LOAD; /*!< Offset: 0x04 SysTick Reload Value Register */
__IO uint32_t VAL; /*!< Offset: 0x08 SysTick Current Value Register */
__I uint32_t CALIB; /*!< Offset: 0x0C SysTick Calibration Register */
} SysTick_Type;
下面是SysTick的配置库函数,对于systick中断优先级配置的是scb->shprx寄存器,而外设的中断优先级配置的是nvic->iprx,有优先级分组,有抢占优先级和子优先级的说法