我是初学者而且不被允许用其他库中的延时函数。请你帮我写一个延时函数
时间: 2024-12-07 19:19:22 浏览: 12
了解,对于初学者,我们可以手动模拟一个简单的延时函数,利用定时器进行计数。以下是一个使用C语言基础计时功能来实现大约100毫秒延迟的简略示例。请注意,这种方法并不适合精密时间控制,但对于基本的应用场景是足够的:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义一个全局变量表示当前的计数周期
unsigned long int timer_count = 0;
#define DELAY_TIME_US 100000 // 目标延时时间,单位是微秒
// 用于计算下一个时间点是否到达的辅助函数
static inline bool is_delay_done()
{
return (timer_count * DELAY_TIME_US) >= HAL_GetTick();
}
void delay(unsigned long int us)
{
// 初始设置
timer_count = us / DELAY_TIME_US;
// 循环等待计数完成
while (!is_delay_done()) {}
// 更新计数,防止下一次立即触发
timer_count++;
}
int main(void)
{
while (1)
{
// 在需要延时的地方调用
delay(100); // 100毫秒延时
// 你的LED操作或其他任务...
printf("Completed a cycle.\n");
}
return 0;
}
```
这个`delay`函数通过比较定时器计数器的值和HAL定时器函数获取的当前tick值,来判断延时是否达到。由于定时器精度有限,实际延时可能会有一些偏差。
**
阅读全文