HAL库delay_us
时间: 2024-01-17 14:03:36 浏览: 111
HAL库中提供了一个函数可以用于微秒级的延时,即`HAL_Delay`函数。但是,该函数的最小延时是1毫秒,因此如果需要微秒级的延时,可以使用以下方法:
```c
void delay_us(uint16_t us)
{
uint32_t ticks = us * (SystemCoreClock / 1000000);
__IO uint32_t tmp;
tmp = SysTick->CTRL; //清空SysTick计数器的值
SysTick->LOAD = ticks; //设置SysTick计数器的初始值
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; //使能SysTick计数器
do {
tmp = SysTick->CTRL;
} while ((tmp & SysTick_CTRL_COUNTFLAG_Msk) == 0); //等待计数器溢出
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; //关闭SysTick计数器
SysTick->VAL = 0x00; //清空SysTick计数器的值
}
```
该函数的原理是使用系统时钟频率计算出需要延时的时钟周期数,然后通过SysTick计数器进行计数,并等待计数器溢出。注意,在使用该函数时,需要先使能SysTick计数器。
相关问题
void HAL_Delay_us(uint16_t us) { uint16_t delay = 0xffff-us-5; //从此数进行计数,如计数了65535次则刚好1us HAL_TIM_Base_Start(&htim3); //开启计数器 __HAL_TIM_SetCounter(&htim3,delay); //设置计数器 while(delay<0xffff-5) { delay = __HAL_TIM_GetCounter(&htim3); //获取当前计数值 } HAL_TIM_Base_Stop(&htim3); }
这是一个用于在微秒级别延时的函数。函数使用了一个定时器来计数,通过设置计数器的初始值和检测计数器的值来实现延时。具体的实现步骤如下:
1. 初始化一个变量`delay`,其值为`0xffff - us - 5`。这个变量将用于进行计数,每计数一次相当于延时1微秒。
2. 启动定时器`htim3`,开始计数。
3. 设置定时器`htim3`的计数器的初始值为`delay`。
4. 进入一个循环,循环条件为`delay < 0xffff - 5`。
5. 在循环中,获取当前计数器的值,并将其赋给`delay`。
6. 当计数器的值达到最大值(0xffff)时,跳出循环。
7. 停止定时器`htim3`的计数。
8. 函数执行完毕,延时结束。
该函数的作用是在给定的微秒数内进行延时。通过使用定时器的计数功能和循环来实现精确的延时。
hal_delay(5000)和delay_us
Hal_delay(5000)是一个HAL库函数,用于在微秒级别上延迟执行程序。它将程序挂起一段时间,以等待指定的时间到期。
Delay_us是一个基于时间的函数,用于在微秒级别上延迟执行程序。它使用计时器来测量经过的时间,并等待指定的时间到期。与Hal_delay不同的是,Delay_us通常是在裸机编程中使用的函数,而Hal_delay通常是在使用HAL库的嵌入式应用程序中使用的函数。
阅读全文