1、什么是Systick定时器?
---》Systick定时器是一个简单的滴答定时器,对于ST的M3、M4、M7内核芯片,都有滴答定时器。
---》Systick滴答定时器常常用来做延迟,或者时时操作系统的心跳时钟。这样可以节省MCU的资源,不用另外浪费一个定时器。比如UCOS系统中,分时复用,需要一个最小的时间戳,一般在STM32+UCOS系统中,都采用Systick滴答定时器做UCOS的心跳时钟。
---》Systick定时器就是一个系统滴答定时器,一个24位的倒计数定时器,记到0时,将从RELOAD寄存器中自动装载定时器初值。只要不把它在Systick控制及状态寄存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作。
---》Systick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。
---》Systick中断的优先级也可以设置。
2、Systick相关寄存器
4个Systick寄存器在HAL库中(core_cm7.h//core_cm4.h)定义位:
1 typedef struct 2 { 3 __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ 4 __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ 5 __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ 6 __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ 7 } SysTick_Type;
CTRL-------------Systick控制和状态寄存器
LOAD-------------Systick自动重装载除值寄存器
VAL----------------Systick当前值寄存器
CALIB-------------Systick校准值寄存器
对于STM32,外部时钟源是HCLK(AHB总线时钟)的1/8,内核时钟是HCLK时钟。
配置函数为:
1 HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource);//Sysick时钟源选择
1 Systick_Config(uint32_t ticks);//初始化Systick时钟为HCLK并开启中断
1 void SysTick_Handler(void);
原文:https://www.cnblogs.com/vcan123/p/10428760.html