STM32F103 之Systick

/*******************如内容有错,或有其他见解欢迎评论交流*****************/

/****************************START****************************************/

1. Systick是什么?在哪里?有什么用?
Systick是一个24位向下计数的定时器;
Systick在处理器内部,而不是stm32的片上外设(使用时无需开启中断号);
三大作用:OS的心跳(只要作用)、延时和测量时间。
2. Systick包含哪些寄存器?
STM32F103 之Systick 

 STM32F103 之Systick

STM32F103 之Systick

bit[2] = 1的内核时钟是SYSCLOCK   bit[2] = 0 时为SYSCLOCK/8

STM32F103 之Systick

用来递减计数的初值     最大为0xffffff = 16 777 215

STM32F103 之Systick

主要用于初始化和测量时间

STM32F103 之Systick

3. Systick怎么用?
(1) 不使用异常Systick->CTRL的bit[1] = 0
如延时:
/*利用SysTick计数器实现1us/1ms精确延时*/
 

STM32F103 之Systick

STM32F103 之Systick

直接调用填入参数即可。
如时间测量:
STM32F103 之Systick
注意funtion的时间
为了提高可移植性,还可以用一个函数指针修饰做参数
(2) 使用异常 Systick->CTRL的bit[1] = 1
做延时:(系统滴答暂且不讨论)
在main中:
STM32F103 之Systick
在"stm32f10x_it.h"中写异常服务函数:
STM32F103 之Systick 
简单的说就是:
STM32F103 之Systick 
SysTick_Config(SystemCoreClock/1000); CTRL的bit[2:0]=0b111
则为使用系统时钟、计数到0产生异常、开启SysTick
SystemCoreClock = 72M  所以SysTick_Config(72K);
所以:周期 = (1/72M)*72k = 1ms


另外:根据ARM Cortex-M3与Cortex-M4权威手册第217页:

若要将SysTick中断作用在一定时间后触发的单发操作,则可以将重载值减少12个周期,以补偿中断等待时间。如要使SysTick在300个时钟周期后执行:

SysTick->LOAD = (300-12);

/************************END************************************/