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);
}