STM32 SysTick配置函数

电子说

1.2w人已加入

描述

之前使用SysTick滴答定时器都是通过查找内核编程手册配置寄存器让SysTick滴答定时器工作的。其实在内核相关的头文件core_cm4.h中已经有SysTick滴答定时器的相关配置了。

寄存器

条件__Vendor_SysTickConfig == 0成立,配置函数才能使用。

寄存器

刚好在stm32f4xx.h中定义了__Vendor_SysTickConfig = 0,所以可以使用该配置函数。

观察函数__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks),其中的寄存器和我们在Systick查询定时中用到的寄存器其实是一样的。

__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
  //SysTick_LOAD_RELOAD_Msk为24,如果装载值超过24位,返回错误信息
  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) { return (1UL); }    /* Reload value impossible */


  SysTick- >LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */
  //设中断端优先级
  NVIC_SetPriority (SysTick_IRQn, (1UL < < __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
  SysTick- >VAL   = 0UL;                                             /* 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 (0UL);                                                     /* Function successful */
}

这种方式没有分频,时钟速度为168Mhz,每秒可计数168000000次,每毫秒可计数168000次,每微秒计数168次。装载值为24位,最大为16777215,可以算得最大延时时间为100ms。

这次的程序不需要上次写的delay文件了,只要在主文件加入SysTick配置函数的头文件core_cm4.h,根据想要定时的时间,计算相应的数值,初始化SysTick配置函数。再调用中断接口封装中断函数,就可以实现SysTick中断了。

如果中断函数像之前那样可能会看不到现象,因为定时时间过短,人眼可能识别不出led灯在闪烁,这里可以添加个计数,相当于定时更长时间才执行想要的程序。

#include "stm32f4xx.h"
#include "led.h"
#include "core_cm4.h"


int main()
{
  LED_Init();              //初始化LED灯
  SysTick_Config(8400000);//延时50ms    168000000/8400000=20     1000/20=50

  while(1)
  {
  }
}


void SysTick_Handler()
{
  static u8 cnt = 0;
  SysTick- >CTRL  &=~  (1< < 16);    //清计数标志位
  cnt++;
  if(cnt == 10)
  {
    LED_Toggle(DS0);              //LED灯闪烁
    cnt = 0; 
  }
}

编译工程项目并烧入开发板,LED灯闪烁,SysTick配置函数调用成功。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分