当前位置:   article > 正文

STM32之HAL开发——系统定时器(SysTick)

STM32之HAL开发——系统定时器(SysTick)

系统定时器(SysTick)介绍

     SysTick—系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中。系统定时器是一个 24bit的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置系统时钟 SYSCLK等于 72M。当重装载数值寄存器的值递减到 0 的时候,系统定时器就产生一次中断,以此循环往复。

    因为 SysTick 是属于 CM3 内核的外设,所以所有基于 CM3 内核的单片机都具有这个系统定时器,使得软件在 CM3 单片机中可以很容易的移植。系统定时器一般用于操作系统,用于产生时基,维持操作系统的心跳。
 

寄存器介绍

    SysTick—系统定时器有 4 个寄存器,简要介绍如下。在使用 SysTick 产生定时的时候,只需要配置前三个寄存器,最后一个校准寄存器不需要使用。
CTRL控制以及状态寄存器使用方法
LOAD重装载数值寄存器
VAL当前数值寄存器

系统定时器(SysTick)使用

CubeMX配置流程

1.配置好RCC时钟
2.配置好时钟来源,时钟频率
3.SYS配置  
4.配置SYS时钟频率

工程代码介绍

使用系统定时器实现,Delay的功能
  1. //时钟初始化配置
  2. void SysTick_Init(void)
  3. {
  4. /* SystemFrequency / 1000 1ms中断一次
  5. * SystemFrequency / 100000 10us中断一次
  6. * SystemFrequency / 1000000 1us中断一次
  7. */
  8. if (HAL_SYSTICK_Config(SystemCoreClock / 1000))
  9. {
  10. /* Capture error */
  11. while (1);
  12. }
  13. }
  14. //延时函数
  15. void Delay_us(__IO u32 nTime)
  16. {
  17. TimingDelay = nTime;
  18. while(TimingDelay != 0);
  19. }
  20. //中断调用函数
  21. void TimingDelay_Decrement(void)
  22. {
  23. if (TimingDelay != 0x00)
  24. {
  25. TimingDelay--;
  26. }
  27. }
  28. //中断函数
  29. void SysTick_Handler(void)
  30. {
  31. HAL_IncTick();
  32. TimingDelay_Decrement();
  33. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/309363
推荐阅读
相关标签
  

闽ICP备14008679号