keil5延时函数.c和.h文件
时间: 2025-04-24 20:24:04 浏览: 32
好的,在嵌入式系统开发中,特别是基于Keil MDK (如 Keil uVision5) 编程 STM8 或者 ARM Cortex-M 系列微控制器时,延时函数是非常常见的功能模块之一。
### `delay.h` 文件
通常用于声明所有对外公开的延时函数接口以及必要的宏定义等。例如:
```c
#ifndef __DELAY_H__
#define __DELAY_H__
#include "stm32f4xx_hal.h" // 根据具体的MCU型号选择对应的头文件
void Delay_ms(uint32_t ms); // 毫秒级延时函数原型声明
void Delay_us(uint32_t us); // 微秒级延时函数原型声明
#endif /* __DELAY_H__ */
```
这里我们包含了 HAL 库的相关头文件,并对两个常用的延时函数进行了声明:毫秒级别的 (`Delay_ms`) 和微秒级别的 (`Delay_us`) 函数。
### `delay.c` 文件
该文件实现了上面所声明的所有函数的具体内容。下面是一个简单的例子:
```c
#include "delay.h"
// 定义全局变量保存当前系统的滴答计数器值
uint32_t uwTick;
/**
* @brief 获取系统时间戳(单位为ms)
*
* @return uint32_t 返回从上电开始经过的时间(ms)
*/
uint32_t getTickCount(void){
return uwTick;
}
/**
* 更新uwTick变量以反映已经过去的实际时间量
*/
void update_uwTick(){
uwTick++;
HAL_Delay(1);
}
/**
* @brief 实现指定毫秒数目的软件延迟
* @param nTime 要等待的时间长度(以毫秒计算)
*/
void Delay_ms(uint32_t ms){
uint32_t startTicks = getTickCount();
while ((getTickCount() - startTicks) < ms){
;
}
}
/**
* @brief 实现指定微妙数目的软件延迟
* @param nTime 要等待的时间长度(以微秒计算),此实现依赖于SysTick定时器配置。
*/
void Delay_us(uint32_t us){
__IO uint32_t temp = 0;
temp = us + (__HAL_GET_SYSTICK() & SysTick->LOAD_Msk);
while ((__HAL_GET_SYSTICK()) <= temp)
{
;
}
}
```
上述代码段给出了一个典型的延时函数框架实现,它利用了STM32 HAL库提供的API来进行精确地控制处理器内核中的系统滴答定时器(SysTick),以此达到较为准确地生成所需延时的目的。
请注意这只是一个非常基础的例子,在实际应用当中你需要根据自己选用的具体单片机系列调整相关的寄存器操作或调用相应的驱动程序API;此外还可以考虑通过硬件定时器来代替这种轮询式的软件延时方案从而提高效率。
阅读全文
相关推荐

















