嘀嗒定时器延时函数
时间: 2023-06-21 18:21:18 浏览: 186
嘀嗒定时器是一种基于STM32的硬件定时器,可以用来产生精确的定时中断。要使用嘀嗒定时器延时函数,需要先配置好嘀嗒定时器的初始化参数(如时钟源、分频系数、计数器周期等),然后在代码中调用延时函数即可。
以下是一个简单的嘀嗒定时器延时函数的示例代码:
```
void Delay(uint32_t nTime)
{
uint32_t timing = micros() + nTime;
while(micros() < timing);
}
```
其中,micros() 是一个获取当前微秒级别时间的函数,nTime 是需要延时的时间,单位为微秒。该函数的作用是在当前时间的基础上加上延时时间,然后不断循环等待,直到当前时间超过了计算出来的结束时间。
注意,嘀嗒定时器的精度受到很多因素的影响,如时钟源、分频系数等,因此在实际使用中需要根据具体情况进行调整和优化。
相关问题
嘀嗒定时器的延时卡死
嘀嗒定时器的延时卡死可能是由于程序中存在时序混乱或中断冲突导致的。为了解决这个问题,可以采取以下解决办法:
1. 确保定时器中断的优先级正确设置:嘀嗒定时器的中断等级默认为最低,如果在定时器中断里调用滴答定时器延时,可能会扰乱时序。可以尝试将嘀嗒定时器的中断等级提高,以确保它不会被其他中断打断。
2. 使用固定时间的定时器中断:将定时器配置成固定的时间进行中断,并在中断中设置一个自增变量。然后在延时函数中使用定时器加循环语句进行延时。这种方式可以更精确地控制延时时间,避免延时卡死的问题。
3. 在操作系统上编写代码:如果你在操作系统上编写代码,例如ucosiii,可以利用操作系统提供的任务调度和定时器功能来避免嘀嗒定时器延时卡死的问题。操作系统可以帮助你更好地管理任务和中断,确保时序的正确性。
请注意,以上解决办法是基于引用内容提供的信息,具体的解决方法可能需要根据具体的硬件和软件环境进行调整和优化。
STM32HAL嘀嗒定时器
STMHAL的嘀嗒定时器是Systick。Systick是一个24位的向下递减的计数器,它的值每当时钟源到来一个时钟,就会减1。一般情况下,我们将Systick的时钟源设置为系统时钟HCLK,也就是80MHZ。这意味着每过1/80M秒,Systick里的计数器就会减1。
当Systick的重装载数值寄存器的值递减为0时,系统定时器就会产生一次中断。此后,CPU会自动重新装载计数器的值,并且循环逐渐递减。这就是Systick的工作原理。
在使用STM32HAL库函数进行延时时,我们可以使用函数HAL_Delay()实现毫秒级的延时。但有时候我们需要更精确的微秒级延时。为了实现微秒级延时,我们可以使用STM32L433的通用定时器TIM6。
除了Systick定时器以外,STM32L433还有6个定时器:TIM1、TIM2、TIM6、TIM7、TIM15、TIM16。其中,TIM6和TIM7是两个16位的自装载基本定时器,它们只能用于定时功能。而TIM1、TIM2、TIM15、TIM16是通用高级定时器,除了定时功能以外还能作为PWM输出。
要在STM32HAL中使用Systick定时器,我们需要调用函数HAL_Init()进行初始化配置,使能Systick。在函数HAL_RCC_ClockConfig中,我们可以看到将全局变量SystemCoreClock设置为80MHZ,并调用HAL_InitTick(),这样就将Systick的时钟源设置为80MHZ了。
通过以上介绍,我们可以了解到STM32HAL中的嘀嗒定时器是Systick,它是一个24位的向下递减的计数器,用于实现精确的延时功能。同时,我们还了解到STM32L433还有其他的定时器可供使用,如TIM6和TIM7用于实现微秒级的延时功能。