原创 STM32使用SysTick精确延时

2009-6-13 09:57 7691 13 12 分类: MCU/ 嵌入式

学习STM32系列芯片已经有一段时间了,从今天起会把STM32的学习笔记发到博客上。


最开始用STM32控制LED闪烁时用的是for循环延时,后来看到网上有用SysTick延时的,精确而且方便,试了一下确实不错!


首先对SysTick初始化:


void SysTick_Config(void)
{
    /* Disable SysTick Counter */
    SysTick_CounterCmd(SysTick_Counter_Disable);        //失能计数器
  
    /* Disable the SysTick Interrupt */
    SysTick_ITConfig(DISABLE);   //关闭中断
  
    /* Configure HCLK clock as SysTick clock source */
    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);   //8分频
    /* SysTick interrupt each 1000 Hz with HCLK equal to 72MHz */
    SysTick_SetReload(9000);   //周期1ms
    /* Enable the SysTick Interrupt */
    SysTick_ITConfig(ENABLE);  //打开中断


 /* Enable the SysTick Counter */
 //   SysTick_CounterCmd(SysTick_Counter_Enable); //使能计数器
}


然后写一个延时的函数:


void Delay(u32 nTime)
{
  /* Enable the SysTick Counter */
  SysTick_CounterCmd(SysTick_Counter_Enable);
 
  TimingDelay = nTime;


  while(TimingDelay != 0);


  /* Disable SysTick Counter */
  SysTick_CounterCmd(SysTick_Counter_Disable);
  /* Clear SysTick Counter */
  SysTick_CounterCmd(SysTick_Counter_Clear);
}


在stm32f10x_it.c中找到void SysTickHandler(void)


写成


void SysTickHandler(void)
{
 TimingDelay_Decrement(); 
}


回到main.c加入中断调用函数:


void TimingDelay_Decrement(void)
{
  if (TimingDelay != 0x00)
  {
    TimingDelay--;
  }
}


这样就OK了!


使用时 Delay(1000); 就是延时1S。


 

文章评论0条评论)

登录后参与讨论
我要评论
0
13
关闭 站长推荐上一条 /2 下一条