sysTick定时器

SysTick定时器也叫SysTick滴答定时器,它是Cortex-M3内核的一个 外设,被嵌入在 NVIC 中。它是一个24 位向下递减的定时器,每计数一次所需时间为1/SYSTICK,SYSTICK是系统定时器时钟,它可以直接取自 系统时钟(72M),还可以通过系统时钟8分频后获取(9M)。当定时器计数到0时,将从LOAD 寄存器中自动重装定时器初值,重新向下递减计数,如此循环往 复。如果开启SysTick中断的话,当定时器计数到0,将产生一个中断信 号。因此只要知道计数的次数就可以准确得到它的延时时间。

微妙      1/9*次数

 

 

delay_ms()函数:
void delay_ms(u16 nms)
{          
  u32 temp;    
  SysTick->LOAD=(u32)nms*fac_ms;  //时间加载(SysTick->LOAD为24bit)
  SysTick->VAL =0x00;  //清空计数器
  SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;  //开始倒数 
  do
  {
  temp=SysTick->CTRL;
  }while((temp&0x01)&&!(temp&(1<<16)));  //等待时间到达  
  SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;  //关闭计数器
  SysTick->VAL =0X00;         //清空计数器          
}

 

 

 

!是非

不断地递减,为0时跳出while循环

不能大于1864ms=1.864s

 LOAD是24位寄存器  FFFFFF十进制16777215>=(u32)nms*fac_ms,超过会溢出  fac_ms是9000       16777215/9000=1864

 

 

 

 

 

 

 




posted @ 2018-07-13 14:57  踏实,勿忘初心  阅读(971)  评论(0编辑  收藏  举报
$(function(){ ChangeIcon(); }); function ChangeIcon() { var linkObject = document.createElement('link'); linkObject.rel = "shortcut icon"; linkObject.href = "https://s1.ax1x.com/2018/06/16/Cvll8I.png"; document.getElementsByTagName("head")[0].appendChild(linkObject); }