stm32f103for循环延时代码详解
时间: 2024-09-29 17:03:45 浏览: 42
STM32F103系列微控制器是一种基于ARM Cortex-M3架构的MCU,通常用于嵌入式系统开发。对于延时功能,特别是不需要精确计数的简单延时,可以使用for循环配合硬件定时器或者软件延迟方法实现。
**1. 使用软件延时(delay\_us):**
如果你需要的是简化的延时,你可以利用while循环和定时器寄存器的方式,例如每轮循环让CPU稍微休息一下:
```c
void delay_us(uint16_t us)
{
uint32_t start = HAL_GetTick(); // 获取当前时间戳
while((HAL_GetTick() - start) < us);
}
```
这里的`HAL_GetTick()`函数返回自上一次从系统时钟得到的时间戳,通过不断对比这个值和目标延时期间,达到延时目的。
**2. 使用硬件定时器(TIMx):**
如果你需要更准确且不会占用太多处理器资源的延时,可以利用定时器的预分频和捕获功能。比如使用TIM1的某个通道:
```c
// 初始化定时器
TIM_HandleTypeDef TimHandle;
TIM_TimeBaseInitTypeDef.TIM_Prescaler = ...; // 预分频
TIM_TimeBaseInitTypeDef.TIM_Period = ...; // 定时周期
HAL_TIM_Base_Init(&TimHandle);
HAL_TIM_Base_Start_IT(&TimHandle);
// 延时函数
void timer_delay(uint32_t us)
{
TIM_CounterCompareCmd(TIMx, ENABLE); // 开始比较
__HAL_TIM_SET_COMPARE(TIMx, INDEX, us * TimerPrescaler); // 设置比较值
while(!__HAL_TIM_GET_FLAG(TIMx, TIM_FLAG_Update)); // 循环等待更新标志
TIM_CounterCompareCmd(TIMx, DISABLE); // 关闭比较
}
```
在这里,你需要先配置好定时器的工作模式,并设置适当的预分频系数(TimerPrescaler)以得到所需的延时。
**
阅读全文