单片机 > 单片机程序设计 > 详情

STM32中3个延时函数

发布时间:2024-07-17 发布时间:
|

第一个延时函数:


void delay(u16 num)

{

  u16 i,j;

  for(i=0;i

    for(j=0;j<0x800;j++);

}

eg:delay(50);

第二个延时函数:


void Delayms(u16 ms)

{

  u16 i,j;

  u8 k;

  for(i=0;i

    for(j=0;j<0x0500;j++) k++;

}

第三个延时函数:


static u8  fac_us=0;//us延时倍乘数

static u16 fac_ms=0;//ms延时倍乘数

//初始化延迟函数

//SYSTICK的时钟固定为HCLK时钟的1/8

//SYSCLK:系统时钟

void delay_init(u8 SYSCLK)

{

SysTick->CTRL&=0xfffffffb;//bit2清空,选择外部时钟  HCLK/8

fac_us=SYSCLK/8;    

fac_ms=(u16)fac_us*1000;

}    

//延时nms

//注意nms的范围

//SysTick->LOAD为24位寄存器,所以,最大延时为:

//nms<=0xffffff*8*1000/SYSCLK

//SYSCLK单位为Hz,nms单位为ms

//对72M条件下,nms<=1864 

void delay_ms(u16 nms)

{    

u32 temp;   

SysTick->LOAD=(u32)nms*fac_ms;//时间加载(SysTick->LOAD为24bit)

SysTick->VAL =0x00;           //清空计数器

SysTick->CTRL=0x01 ;          //开始倒数  

do

{

temp=SysTick->CTRL;

}

while(temp&0x01&&!(temp&(1<<16)));//等待时间到达   

SysTick->CTRL=0x00;       //关闭计数器

SysTick->VAL =0X00;       //清空计数器      

}   

//延时nus

//nus为要延时的us数.       

void delay_us(u32 nus)

{

u32 temp;      

SysTick->LOAD=nus*fac_us; //时间加载    

SysTick->VAL=0x00;        //清空计数器

SysTick->CTRL=0x01 ;      //开始倒数  

do

{

temp=SysTick->CTRL;

}

while(temp&0x01&&!(temp&(1<<16)));//等待时间到达   

SysTick->CTRL=0x00;       //关闭计数器

SysTick->VAL =0X00;       //清空计数器  

}


关键字:STM32  延时函数 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51实现定时器定时调整