STM32定时器实现US
时间: 2025-04-30 16:18:12 浏览: 29
### 使用 STM32 定时器实现微秒级延迟或计时
#### 1. 配置定时器用于微秒级延时
为了在 STM32 上实现微秒级别的精确延时,通常会选择一个具有较高精度的定时器。对于 STM32L431RCT6 而言,可以选择 TIM2 或者其他通用定时器来完成这个任务[^2]。
首先,在初始化阶段设置定时器的工作参数:
```c
void MX_TIM2_Init(void)
{
__HAL_RCC_TIM2_CLK_ENABLE();
TIM_HandleTypeDef htim2;
htim2.Instance = TIM2;
// 设置自动重装载预分频器
uint32_t uwTimClock = HAL_RCC_GetPCLK1Freq();
uint32_t PrescalerValue = (uwTimClock / 1000000) - 1;
TIM_OC_InitTypeDef sConfigOC;
htim2.Init.Prescaler = PrescalerValue;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 999; // 自动重装载值设定为最大周期减去1
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
{
Error_Handler();
}
}
```
上述代码片段展示了如何通过调整 `Prescaler` 和 `Period` 来达到每毫秒触发一次更新事件的效果。这里的关键在于计算合适的预分频系数使得定时器能够以期望的速度运行,并且根据实际需求调整自动重装载寄存器中的数值[^3]。
#### 2. 创建微秒级别延时函数
基于已经配置好的定时器实例,现在可以编写一个简单的延时函数来进行微秒级别的等待操作:
```c
void delay_us(uint32_t us)
{
__IO uint32_t temp = 0;
// 开始计数前清除所有标志位
__HAL_TIM_SET_COUNTER(&htim2, 0);
while (__HAL_TIM_GET_COUNTER(&htim2) < us);
// 清除任何可能存在的中断请求
temp = __HAL_TIM_GET_FLAG(&htim2, TIM_FLAG_UPDATE);
}
```
这段程序利用了之前定义过的 `htim2` 对象,通过读取并监控其内部计数器的状态直到满足指定的时间间隔为止。注意这里的循环结构简单直接,适用于较短时间范围内的精准延时;如果需要处理更长时间,则建议采用中断驱动的方式提高效率和响应速度。
#### 3. SysTick 实现微秒级延时
除了使用专用硬件定时器之外,还可以考虑借助于 Cortex-M 内核自带的 Systick 定时器来达成同样的目的。这种方法的优势在于不需要额外占用外部资源,同时也简化了编程模型[^4]:
```c
void delay_systick_us(uint32_t us)
{
SysTick->LOAD = us * (SystemCoreClock / 1000000UL)-1 ;// Load value for microsecond delays based on system core clock frequency.
SysTick->VAL = 0;// Reset current timer value register.
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_CLKSOURCE_Msk ;
while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk ));// Wait until count flag is set indicating that required time has elapsed.
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk ;
SysTick->VAL = 0;
}
```
此版本依赖于内核提供的 Systick 控制逻辑,通过对加载寄存器 (`LOAD`) 的适当赋值得到所需的延时时长。由于大多数情况下系统的主频远高于 MHz 级别,因此可以直接在此基础上构建高效的微秒级延时机制。
阅读全文
相关推荐


















