一、SysTick定时器介绍
- SysTick定时。器也叫SysTick滴答定时器,是M3内核的一个外设,被嵌入在NVIC当中
- SysTick定时器是一个24位的递减定时器,每计数一次所需要的时间是 1/SysTick。SysTick是系统定时器时钟,它有两种途径,通过AHB总线直接到达SysTick定时器作为它的时钟源,另一种是通过对系统时钟8分频之后得到SysTick定时器的时钟源,这两种时钟源都可以作为SysTick定时器来使用,通常使用的比较多的是通过8分频之后。所以每计数一次所需要的时间是 1/(72/8) 即1/9,单位是微秒,换句话说,在 1us 的时间,它会计数 9 次。
- 当定时器计数到0的时候,它就会从LOAD寄存器当中重新自动装载定时器的一个初值,重新向下递减。当递减到0的时候还会产生一个中断信号,因此,如果要配置中断,也可以让SysTick定时器产生一个中断。
- SysTick递减一次的时间是 1/9us ,因此,只要知道它递减了多少次,也就得到了它的时间
二、SysTick定时器操作
需要先了解寄存器的相关功能,因为STM32官方固件库没有提供SysTick定时器的相应配置函数,所以需要对SysTick定时器它相应的一些位来进行了解,主要是操作4个寄存器
CTRL寄存器
- 它是SysTick定时器的控制及状态寄存器
位介绍
位 | 名称 | 功能 |
---|---|---|
0 | ENABLE | 使能位,设置为1使能 |
1 | TICKINT | 中断使能位,使用SysTick中断将该位置1 |
2 | CLKSOURCE | 时钟源选择,1为不分频时钟,0为8分频后的时钟 |
16 | COUNTFLAG | 可用来判断定时器是否已经计数到0 |
LOAD寄存器
LOAD寄存器重新自动装载定时器的一个初值,重新向下递减。24位,0-23有效。
VAL寄存器
SysTick当前数值寄存器,当递减到0的时候COUNTFLAG为1。24位,0-23有效。VAL就是存储当前的倒计数的值
CALIB寄存器
校准数值的寄存器,32位寄存器,0-23存放的倒计数的值,30位是校准值,31是外部参考时钟的选择
这个寄存器很少使用
三、SysTick定时器操作步骤
- 设置SysTick定时器的时钟源。
- 设置SysTick定时器的重装初始值(如果要使用中断的话,就将中 断使能打开)。
- 通过重装载值的赋值可以确定SysTick定时器的一个定时时间,当SysTick定时器递减到0时,它会从重装载寄存器当中赋值继续递减,递减到0时也会产生一个中断请求
- 清零SysTick定时器当前计数器的值。
- 打开SysTick定时器。
四、软件设计
- 创建SysTick.c文件,存放到Public文件夹下
- 添加到项目组
- 添加misc文件
文件中含有相应的中断,NVIC,SysTick等的时钟配置函数
SysTick.h
SysTick.c
- static用于全局的使用,相当于一个全局的变量
- 定时器初始化为什么要定义一个变量进来,是因为我们在使用SysTick系统时钟的时候,系统时钟不是72M,比如36M,就可以通过修改函数的形参传递进来,它的微秒级也同样会修改
Be the first person to leave a comment!