stm32中的延時函數


//粗延時函數,微秒

  • void delay_nus(u16 time)
  • {    
  •    u16 i=0;  
  •    while(time--)
  •    {
  •       i=10;  //自己定義
  •       while(i--) ;    
  •    }
  • }

 

 

//毫秒級的延時

  • void delay_nms(u16 time)
  • {    
  •    u16 i=0;  
  •    while(time--)
  •    {
  •       i=12000;  //自己定義
  •       while(i--) ;    
  •    }
  • }

 

 

運用SysTick來實現准確定時:

 

  • SysTick_Config(SystemCoreClock / 10)   函數的形參就是systick重裝定時器的值。
  • systick計數頻率為每秒72000000次,所以7200000次就是1/10秒,也就是100ms。
  • SysTick是1個24bit遞減計數器,通過對SysTick控制與狀態寄存器的設置,可選擇HCLK時鍾(72M)或HCLK的8分頻作為SysTick的時鍾源。//V3.5默認為HCLK時鍾
  • SysTick的重裝寄存器決定了定時器頻率。
  • 若SysTick的時鍾源是72M,   SystemFrequency = 72000000Hz
  • 所以 SysTick_Config(SystemCoreClock / 1000); 就是1ms時基。

 

 


SysTick的初始化設置:
void Init_SysTick(void)
{
if(SysTick_Config(SystemCoreClock / 1000)) //注意:3.5庫中 SystemFrequency 被 SystemCoreClock 取代。
while(1);
}



延時函數:
__IO uint32_t TimingDelay;
void delay_ms(__IO uint32_t nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}

中斷函數:
extern __IO uint32_t TimingDelay;
void SysTick_Handler(void)
{
if (TimingDelay != 0x00)

TimingDelay--;
}
}




delay_ms(1000);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM