STM32知识:Systick定时器

一、Systick定时器介绍

     Systick定时器也叫做系统滴答时钟,它位于Cortex-Mx内核之中,属于“内设”,因此所有Cortex-Mx内核的MCU都有Systick定时器。

     Systick是一个24位递减计数器(^{^{^{^{^{^{_{}}}}}}}最大设定重装载值为2^{24}=2^{4}M=16M=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开启外设时钟。

猜你喜欢

转载自blog.csdn.net/chn_zx/article/details/131684781