stm32 delay 1ms
时间: 2024-08-13 08:05:41 浏览: 51
STM32微控制器中的延时函数1ms(毫秒)通常使用定时器来实现,因为定时器能够提供精确的时间间隔控制。在STM32中,一种常见的方法是使用软件延时,如利用系统定时器的空闲周期或者使用SysTick定时器。
1. **System Tick定时器法**:
如果系统没有使用其他的高优先级定时器,可以利用SysTick定时器设置一个1ms的中断周期,然后在中断服务函数中增加计数器。当计数器达到预设值(例如1000)时,表示延时1ms完成。
```c
void delay_ms(uint32_t ms)
{
uint32_t start = SysTick_GetCounter();
while ((SysTick_GetCounter() - start) < (ms * sysTickFreq / 1000));
}
```
这里的`sysTickFreq`通常需要在系统启动时通过`HAL_RCC_GetHCLKFreq()`获取系统时钟频率。
2. **硬件定时器法**(如TIMx):
如果有可用的高级定时器(如TIM1、TIM8等),可以配置定时器的工作模式为PWM模式,然后根据定时器的分频系数和预设值来设置大约1ms的时间间隔。
```c
void TIM_Delay(uint32_t delay, TIM_HandleTypeDef *htim)
{
htim->Instance->ARR = (uint16_t)(htim->Prescaler * (delay * 1000) + 1);
htim->Instance->CR1 |= TIM_CR1_CEN; // 启动定时器
while (!(htim->Instance->SR & TIM_SR_UI)); // 等待定时器溢出标志UI被置位
htim->Instance->CR1 &= ~TIM_CR1_CEN; // 停止定时器
}
```
使用硬件定时器的优点是精度更高,但需要占用额外的硬件资源。
阅读全文