STM32延时us程序

硬件:STM32F103C8 (8M晶振)

文件名:DELAY.H

extern void delay_nus(u32 Nus);
extern void delay_nms(u16 nms);
extern void delay_init(u8 SYSCLK);
extern void delay_ns(u16 ns);

文件名:DElAY.C

//使用SysTick的普通计数模式对延迟进行管理
//包括delay_us,delay_ms  
static u8  fac_us=0;//us延时倍乘数
static u16 fac_ms=0;//ms延时倍乘数
//初始化延迟函数
//SYSCLK 取值如72,36等
void delay_init(u8 SYSCLK)
{
SysTick->CTRL&=0xfffffffb;//选择内部时钟 HCLK/8
fac_us=SYSCLK/8;      //72M/8=9M,,每次计数1/9us,所以计数为9时正好1us
fac_ms=(u16)fac_us*1000;
}            
//延时Nms
//注意Nms的范围
//Nms<=0xffffff*8/SYSCLK
//对72M条件下,Nms<=1864 
void delay_nms(u16 nms)
{    
SysTick->LOAD=(u32)nms*fac_ms; //时间加载  
SysTick->CTRL|=0x01;               //开始倒数    
while(!(SysTick->CTRL&(1<<16)));   //等待时间到达 
SysTick->CTRL&=0XFFFFFFFE;         //关闭计数器
SysTick->VAL=0X00000000;           //清空计数器     
}   
//延时us           
void delay_nus(u32 Nus)

SysTick->LOAD=Nus*fac_us;       //时间加载      
SysTick->CTRL|=0x01;            //开始倒数    
while(!(SysTick->CTRL&(1<<16)));//等待时间到达 
SysTick->CTRL=0X00000000;       //关闭计数器
SysTick->VAL=0X00000000;        //清空计数器     


//延时s 
void delay_ns(u16 ns)
{
    while(ns--)
    {
        delay_nms(1000);
    }
}


运用实例:

在初始化系统时钟的时候进行delay模块的初始化:delay_init(72);  //系统时钟为72M

延时几秒的时候,注意调用delay_ns(u16 ns),而非delay_nms(u16 nms),从而确保精确度。

注意头文件的包含~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值