使用stm32f407的标准库写一个有延时功能的Delay函数库,包括Delay_ms,Delay_us,Delay_s
时间: 2024-12-28 11:37:36 浏览: 7
在STM32F407微控制器上使用标准库编写延迟函数,通常需要利用其内部定时器资源。这里是一个基本的示例,展示如何创建`Delay_ms`, `Delay_us`, 和 `Delay_s` 函数,它们分别用于毫秒、微秒和秒级别的延时。
首先,你需要包含必要的头文件,并启用延时相关的中断:
```c
#include "stm32f4xx_hal.h"
#include "延时.h" // 自定义的头文件,用于存放这些函数
// 定义延时宏常量
#define DELAY_TICKS_PER_MS (SystemCoreClock / 1000)
#define DELAY_TICKS_PER_US (SystemCoreClock / 1000000)
#define DELAY_TICKS_PER_S (SystemCoreClock)
void DelayMs(uint32_t ms) {
__HAL_RCC_TIM4_CLK_ENABLE(); // 启动TIM4定时器
TIM_HandleTypeDef htim4;
htim4.Instance = TIM4;
htim4.Init.Prescaler = ((SystemCoreClock / 1000) - 1); // 根据CPU频率计算预分频值
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
htim4.Init.Period = ms * DELAY_TICKS_PER_MS;
HAL_TIM_Base_Init(&htim4);
HAL_TIM_Base_Start_IT(&htim4); // 开始异步中断计数
while (__HAL_TIM_GET_FLAG(&htim4, TIM_FLAG_UPDATE) == RESET) {} // 等待直到计满
HAL_TIM_Base_Stop_IT(&htim4);
}
void DelayUs(uint32_t us) {
uint32_t ticks_needed = us * DELAY_TICKS_PER_US;
DelayMs(ticks_needed / DELAY_TICKS_PER_MS);
}
void DelayS(uint32_t s) {
uint32_t ticks_needed = s * DELAY_TICKS_PER_S;
DelayMs(ticks_needed / DELAY_TICKS_PER_MS);
}
```
阅读全文