一、Systick定时器介绍
Systick定时器也叫做系统滴答时钟,它位于Cortex-Mx内核之中,属于“内设”,因此所有Cortex-Mx内核的MCU都有Systick定时器。
Systick是一个24位递减计数器(最大设定重装载值为=16777215),每经过1个系统时钟周期,计数值减1,这里的“系统时钟”即为Systick时钟,其频率最高为HCLK/8,其中HCLK是AHB总线时钟,也是CUP系统时钟,对stm32f103来说,最大为72MHz,对应Systick时钟最高为9MHz。如果将Systick重装载值设定为9000,时钟设定为9MHz,Systick则产生1ms的中断(可设定最大延时为16M/9M=1.8s)。
Systick定时器作用:
1)可以产生精确的延时;
2)可以提供给操作系统一个单独的心跳(时钟)节拍。
二、Systick寄存器
(1)CTRL:Systick控制寄存器
Bit 16:COUNTFLAG, 如果在上次读取本寄存器后,SysTick已经数到了0,则该位为 1。如果读取该位,该位将自动清零。
Bit 2:CLKSOURCE,时钟源选择位 。0: AHB/8; 1: AHB。
Bit 1:TICKINT: SysTick中断响应位 。
0: 计数器减到0不产生中断;1:计数器减到0产生中断
Bit 0:ENABLE,计数器使能位,0:关闭;1:开启。当ENABLE设置为1时,计数器重加载寄存器,然后倒计时。当达到0时,它将COUNTFLAG设置为1,然后根据TICKINT的值选择是否产生中断。然后,它将重新加载再次计算,然后开始计数。
【原文链接:https://blog.csdn.net/thebestleo/article/details/109675976】
(2)LOAD:Systick重装载寄存器 ,24位
(3)VAL:Systick当前值寄存器 ,24位
(4)CALIB:Systick校准值寄存器 (不常用,校准用)
三、ST库函数使用Systick
1.调用SysTick_CounterCmd(SysTick_Counter_Disable); 关闭SysTick计数器
2.调用SysTick_ITConfig(DISABLE);关闭SysTick中断
3.调用SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_DIV8);设置SysTick时钟源, 72M/8=9MHz
4.调用SysTick_SetReload(9000*N); 设定重装载值
5.调用SysTick_ITConfig(ENABLE);打开SysTick中断
6.调用SysTick_CounterCmd(SysTick_Counter_ENABLE); 打开SysTick计数器
[PS: 另外有,SysTick_GetCounter,获取计数器的值;Systick_GetFlagStatus,标志位设置与否]
需要注意的是由于SysTick在内核,属于“内设”,因此不需要通过RCC开启外设时钟。