STM32的标准库中的延迟函数是?对标HAL_Delay
时间: 2024-05-04 07:17:51 浏览: 227
在STM32的标准库中,延迟函数是使用SysTick定时器实现的,具体函数是`Delay()`。它的原型定义如下:
```c
void Delay(__IO uint32_t nTime);
```
其中,参数`nTime`表示需要延迟的时间,单位为毫秒。在函数内部,使用了SysTick定时器来实现延迟,具体实现方式如下:
```c
void Delay(__IO uint32_t nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}
```
其中,`TimingDelay`是一个全局变量,它在SysTick中断服务函数中被递减。当`TimingDelay`为0时,表示延迟时间已经达到,函数返回。
需要注意的是,STM32的标准库中的延迟函数不是精确的延迟函数,因为它的实现方式是基于SysTick定时器的中断服务函数,而中断服务函数的执行时间是不确定的,因此延迟时间也会有一定的误差。如果需要精确的延迟时间,建议使用定时器或者外部时钟源来实现延迟。对标HAL_Delay函数,在HAL库中也是使用SysTick定时器来实现延迟的。
相关问题
stm32 LL库中 ,类似于HAL_Delay的函数是哪个?
在STM32的LL库中,类似于HAL_Delay的函数是LL_mDelay函数。它的原型定义如下:
```
void LL_mDelay(uint32_t Delay);
```
该函数用于阻塞程序执行,使程序暂停指定的时间。参数Delay是以毫秒为单位的延迟时间。注意,该函数不是精确的延迟函数,延迟时间可能会受到其他中断的影响。如果需要更精确的延迟,请使用定时器中断或其他更高级的技术。
STM32 HAL库自己写个延时函数,不用HAL_Delay()
可以使用系统滴答定时器(SysTick)实现延时函数。SysTick是一个24位向下计数器,每次减1,当减到0时会产生一个中断,通过中断服务函数可以实现延时操作。以下是一个使用SysTick实现的延时函数:
```
void delay_ms(uint32_t nms)
{
uint32_t ticks = nms * (SystemCoreClock / 1000 / 8);
SysTick->LOAD = ticks;
SysTick->VAL = 0;
SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk;
while(!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk));
}
```
这个函数的参数是需要延时的毫秒数。在函数内部,首先计算出需要的滴答定时器的计数值,然后将其加载到LOAD寄存器中。接着将VAL寄存器清零,使滴答定时器立即开始倒计时。最后,使能滴答定时器,并等待滴答定时器计数完成。
阅读全文