stm32毫秒级延时
时间: 2024-08-29 18:00:16 浏览: 104
stm32延时函数,毫秒延时,微秒延时
在STM32微控制器中,实现毫秒级延时通常有两种方法:硬件计数法和软件延时循环法。
**硬件计数法(Timer-based delay)**:
利用STM32的定时器资源,如TIMx,通过设置预分频器、计数器初值和溢出中断,然后进入一个等待状态,当计数溢出时,外部中断就会唤醒处理程序,此时可以根据预先计算的时间间隔减去已消耗的时间来更新剩余时间,再次进入等待。这种方法精度较高,但初始化和中断处理可能会占用一定时间。
**软件延时循环法(Software delay loop)**:
在主循环里,通过一个for循环或while循环,每次循环执行一次,然后睡眠一小段时间(比如利用HAL库提供的DelayMilliseconds函数)。这种方式简单快捷,但精度较低,受CPU频率影响较大,不适合长时间延迟。
下面是一个使用软件延时的例子(假设使用的是STM32F103):
```c
void delay_ms(uint32_t ms)
{
uint32_t start_time = HAL_GetTick();
while ((HAL_GetTick() - start_time) < ms * 1000 / HAL_RCC_GetHCLKFreq()); // 1ms大约等于1000个系统时钟周期
}
```
在这个例子中,`HAL_GetTick()`函数返回自上次复位以来经过的毫秒数,`HAL_RCC_GetHCLKFreq()`获取系统的时钟频率。
阅读全文