delay.h

#ifndef DELAY_H
 
#define DELAY_H
 
#include <stdint.h>
 
  
 
static volatile uint64_t us_count = 0; // 微秒计数器
 
  
 
/*---------------------------------------------------------------------------------------*/
 
/* 使用说明:开启一个每微秒触发一次的定时器更新中断,在中断服务程序中调用Delay_UsCount函数即可 */
 
/*-------------------------------------------------------------------------------------*/
 
  
// 获取当前微秒计数
uint64_t GetUs(void);  
 
// 延时函数声明
 
void Delay_us(uint32_t us);
 
void Delay_ms(uint32_t ms);
 
void Delay_s(uint32_t s);
 
// 中断服务程序中调用此函数以增加微秒计数
static inline void Delay_UsCount(void)
 
{
 
    us_count++;
 
}
 
#endif // !DELAY_H

delay.c

#include "delay.h"
 
// @简介: 获取当前微秒计数
// @返回值: 当前微秒计数
uint64_t GetUs(void)
{
    return us_count;
}
 
// @简介: 延时指定微秒数
// @参数: us  - 需要延时的时间,单位微秒
void Delay_us(uint32_t us)
{
    uint64_t start = GetUs();
    while ((GetUs() - start) < us)
    {
        // 等待
    };
}
 
// @简介: 延时指定毫秒数
// @参数: ms  - 需要延时的时间,单位毫秒
void Delay_ms(uint32_t ms)
{
    Delay_us(ms * 1000);
}
 
// @简介: 延时指定秒数
// @参数: s  - 需要延时的时间,单位秒
void Delay_s(uint32_t s)
{
    Delay_ms(s * 1000);
}