stm32,定义一个delay函数
时间: 2024-10-18 09:03:04 浏览: 51
STM32是一款由STMicroelectronics公司生产的嵌入式微控制器系列,主要用于物联网、工业控制等领域。在STM32中,由于硬件资源有限,尤其是没有专门的硬件延时计数器,通常需要通过软件实现一个简单的延时函数。下面是一个基于定时器基础的软件延迟函数示例,这里假设使用了 TIM3 定时器:
```c
#include "stm32f10x_tim.h" // 包含STM32定时器头文件
// 定义一个全局变量,用于存储当前待执行的延时周期
uint32_t delay_time = 0;
void Delay(uint32_t ms) {
uint32_t prescaler_value;
uint32_t counter_value;
// 计算TIM3 Timer Prescaler 值
if (ms > 0xFFFFU) { // 如果超过65535毫秒
prescaler_value = 0; // 使用最高频率(1MHz)
} else {
prescaler_value = RCC_GetClockDivider(RCC_APB1Periph_TIM3) - 1; // 获取当前系统时钟除以分频后的值减1
prescaler_value = ((ms * SystemCoreClock / 1000U) + prescaler_value) >> 1; // 根据实际需求计算分频
}
// 配置TIM3定时器
TIM_TimeBaseInitTypeDef.TIM_Period = prescaler_value + 1; // 加1是因为计数从0开始
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct); // 初始化定时器
TIM_Cmd(TIM3, ENABLE); // 启动定时器
while (delay_time != ms) { // 当计数值等于设定的时间
counter_value = TIM_GetCounter(TIM3);
while (counter_value < prescaler_value); // 等待定时器计满一次
counter_value++;
}
TIM_Cmd(TIM3, DISABLE); // 关闭定时器
}
阅读全文