STM32定时器延时1us代码
时间: 2024-06-10 15:06:35 浏览: 191
以下是在 C 语言中使用 STM32 定时器延时 1us 的代码示例:
```c
#include "stm32f4xx_hal.h"
void delay_us(uint32_t us)
{
TIM_HandleTypeDef htim;
TIM_OC_InitTypeDef sConfig;
// 设置定时器参数
htim.Instance = TIM4;
htim.Init.Prescaler = HAL_RCC_GetSysClockFreq() / 1000000;
htim.Init.CounterMode = TIM_COUNTERMODE_UP;
htim.Init.Period = 0xFFFF;
htim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_Base_Init(&htim);
// 初始化定时器通道
sConfig.OCMode = TIM_OCMODE_TIMING;
sConfig.Pulse = us;
sConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfig.OCFastMode = TIM_OCFAST_DISABLE;
HAL_TIM_OC_Init(&htim);
HAL_TIM_OC_ConfigChannel(&htim, &sConfig, TIM_CHANNEL_1);
// 启动定时器
HAL_TIM_Base_Start(&htim);
HAL_TIM_OC_Start(&htim, TIM_CHANNEL_1);
// 等待定时器中断
while (__HAL_TIM_GET_FLAG(&htim, TIM_FLAG_CC1) == RESET);
__HAL_TIM_CLEAR_FLAG(&htim, TIM_FLAG_CC1);
// 停止定时器
HAL_TIM_Base_Stop(&htim);
HAL_TIM_OC_Stop(&htim, TIM_CHANNEL_1);
}
```
使用该函数可以延时 1us,调用方式如下:
```c
delay_us(1);
```
请注意,实际上延时时间可能略微有误差。如果需要更高的精度,可以使用定时器输入捕获模式来测量延时时间,然后根据实际测量值来调整定时器参数。
阅读全文