轻松搞懂STM32F4SysTick定时器

定时器在单片机中是一个非常重要东西,其中在Cortex系列的芯片中,内核给我们提供了一个定时器,就是滴答定时器SysTick。其功能就是计时。

SysTick定时器的作用

        1:用于延时

        2:用于产生中断

        3:用于单片机系统(这里不做解释)

SysTick内部结构

        

 根据这个图,总结下各个的作用

HCLK:系统时钟,不会的话可以看我之前的视频

/8 : 一个8分频的分频器,也可以不分

VAL:倒计时寄存器:只用了低0-23位,高位保留(VAL就是Value意思)

LOAD:自动重装载寄存器(load就是本地的意思,本地的寄存器)(英语水平不够,我也不知道他咋就翻译成了自动重装载寄存器了)

 CTRL:控制寄存器--拆开就是C(唱)T(跳)R(rap)L(篮球),很生动

SysTick运行的过程是,当SysTick开始运行

1:HCLK提供一个时钟,8分频或不分频来到VAL。

2:VAL内有一个值,每当收到时钟的一个脉冲,则向下递减1位

3:当VAL递减到0时,CTRL内标志位置1表示一个定时周期以完成,并将LOAD内的值赋予VAL。同时根据CTRL内的配置位决定是否触发中断。

在SysTick中只有一个函数需要配置,但是如果想做一些比较灵活的操作的话,需要函数内的位操作有一个比较清楚的认识。

函数位于core_cm4.h中

__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
  if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk)  return (1);      /* Reload value impossible */

  SysTick->LOAD  = ticks - 1;                                  /* set reload register */
  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Systick Interrupt */
  SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
                   SysTick_CTRL_TICKINT_Msk   |
                   SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */
  return (0);                                                  /* Function successful */
}

这是官方的函数,我们一行一行来解析

第一行:

__STATIC_INLINE官方定义为  

  #define __STATIC_INLINE  static __inline

static:修饰函数只在当前文件有效 

__inline:函数被调用时以内联的方式,及不进行创建栈而是将改函数直接复制到引用处。

param:ticks:就是计数值,ticks-1就是放入LOAD中的值

第三行:检测是否参数是否超限,也就是是否超过2的24次方-1

第四行:将tisks-1放入LOAD

第五行:

NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); 

 这个函数用于设置SysTick中断优先级的,对于中断优先级不了解的可以看我的另一篇文章,轻松搞懂STM32F407优先级

第六行:清空VAL

第七行:设置CTRL,按从上到下顺序为,设置是否分频,设置是否开启中断,设置SysTick使能。

这里我本来是不想放寄存器介绍的,寄存器直接翻手册就可以了,但是内核这一块东西都是内核手册,而且内核手册是英文的,所以把野火的介绍拿来搞一下,另外其实SysTick还有个校准寄存器,不过没多大用,就不介绍了。

 就是这里还有一个地方需要注意,就是这个寄存器的16位,这个用于标志一个计时周期的,读取VAL寄存器会使得这个位自动置0;

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值