hal库封装一个用定时器延时us的函数
时间: 2024-06-08 13:05:12 浏览: 17
在HAL库中,可以使用定时器来实现微秒级的延时。下面是一个使用STM32 HAL库的示例代码:
```c
#include "stm32f4xx_hal.h"
void delay_us(uint32_t us)
{
TIM_HandleTypeDef htim;
// 初始化定时器
htim.Instance = TIM2;
htim.Init.Prescaler = SystemCoreClock / 1000000 - 1; // 定时器时钟为1MHz
htim.Init.Period = 0xFFFF;
htim.Init.CounterMode = TIM_COUNTERMODE_UP;
htim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_Base_Init(&htim);
// 启动定时器
HAL_TIM_Base_Start(&htim);
// 循环延时
while (us--)
{
while (!(TIM2->SR & TIM_SR_UIF)); // 等待计数器溢出
TIM2->SR &= ~TIM_SR_UIF; // 清除中断标志
}
// 停止定时器
HAL_TIM_Base_Stop(&htim);
}
```
在这个函数中,我们使用了定时器2来实现微秒级的延时。首先,我们初始化了定时器的时钟和计数周期,然后启动计数器,并在循环中等待计数器溢出,然后清除中断标志。最后,我们停止定时器以节省功耗。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)