stm32 定时器_STM32使用通用定时器做精确延时(非中断方式)
时间: 2023-08-05 11:11:52 浏览: 188
在STM32中,通用定时器(TIM)可以用来实现精确延时。以下是一个基于TIM的延时函数:
```c
void Delay_us(uint32_t us)
{
uint32_t ticks;
RCC_ClocksTypeDef RCC_Clocks;
RCC_GetClocksFreq(&RCC_Clocks);
ticks = RCC_Clocks.HCLK_Frequency / 1000000 * us;
TIM_Cmd(TIM2, DISABLE);
TIM_SetCounter(TIM2, 0);
TIM_SetAutoreload(TIM2, ticks);
TIM_Cmd(TIM2, ENABLE);
while (TIM_GetCounter(TIM2) < ticks);
TIM_Cmd(TIM2, DISABLE);
}
```
该函数使用TIM2定时器,并且假定系统时钟频率已经被设置为HCLK。该函数的运行步骤如下:
1. 计算延时所需的定时器计数器数值(ticks)。
2. 禁用TIM2定时器。
3. 将TIM2计数器清零。
4. 将TIM2自动重载寄存器设置为ticks。
5. 启用TIM2定时器。
6. 循环等待,直到TIM2计数器达到ticks。
7. 禁用TIM2定时器。
使用该函数时,只需要传入需要延时的微秒数即可。例如,如果需要延时100毫秒,可以调用`Delay_us(100000)`函数。
需要注意的是,该函数没有使用中断方式,因此会占用CPU资源。如果需要长时间延时,建议使用中断方式实现。
阅读全文