systick简介
1:系统定时器,24位,只能递减,存在于内核,嵌套在NVIC中,所有的Cortex-M内核的单片机都具有这个定时器。
2:功能框图
递减计数器和重装载计数器都是24bit的
3:这篇用的是M3内核
4:可以用来做延时,相当于以前的延时函数
寄存器描述
COUNTFLAG:一读这个位,他就清零了
这个就是配置时钟源,是8分频还是1分频。ENABLE那个1是使能定时器
定时器时间计算
t = reload * ( 1/clk )
Clk = 72M时,t = (72) *(1/ 72 M )= 1US
Clk = 72M时,t = (72000) *(1/ 72 M )= 1MS
时间单位换算:
1s = 1000ms = 1000 000 us = 1000 000 000ns
一般程序用的都是ms级别,us就一直进入中断
系统代码分析
1:SysTick寄存器结构体
//core_cm3.h
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;
2:SysTick配置库函数
//core_cm3.h
static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{
//判断ticks的值是否大于2的24次方
if (ticks > SysTick_LOAD_RELOAD_Msk) <