stm32hal计时
时间: 2025-01-08 15:11:23 浏览: 10
### STM32 HAL 库中的计时功能
#### 定时器输入捕获配置
在STM32 HAL库中实现定时器输入捕获功能,通常用于测量外部信号的时间间隔或频率。通过STM32CubeMX初始化TIM模块并设置为输入捕获模式后,在代码部分主要操作如下:
```c
// 初始化 TIM 输入捕获结构体
static void MX_TIM2_Init(void)
{
__HAL_RCC_TIM2_CLK_ENABLE();
htim2.Instance = TIM2;
htim2.Init.Prescaler = 79; // 设置预分频系数,假设系统时钟80MHz,则此值对应1us的计数周期
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 65535;
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_IC_Init(&htim2) != HAL_OK)
{
Error_Handler();
}
}
```
为了读取捕捉到的数据,定义回调函数来处理中断事件[^1]。
```c
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1){
uint32_t inputCaptureValue=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
// 对inputCaptureValue做进一步处理...
}
}
```
#### 看门狗应用实例
对于防止程序异常停止的问题,可以利用独立看门狗(IWDG)或者窗口看门狗(WWDG),这里给出简单的WWDG启动例子作为补充说明:
```c
/* WWDG Configuration */
__HAL_RCC_WWDG_CLK_ENABLE(); /* Enable the peripheral clock of WWDG */
wwdg_handle.Instance=WWDG;
wwdg_handle.Init.Window=0x7F; // Set window value to maximum allowed by hardware.
wwdg_handle.Init.EWSG=0x3F; // Early wakeup stage gate set as half cycle.
if(HAL_WWDG_Init(&wwdg_handle)!=HAL_OK){
while(1); // Initialization error handling loop here.
}
while (1){
/* Add your application code here */
HAL_WWDG_Refresh(&wwdg_handle,0x7F); // Refresh watchdog counter within its valid range periodically.
}
```
上述代码展示了如何刷新窗口看门狗以避免其触发复位动作,同时也体现了看门狗机制的重要性——即使遇到未预见错误也能保障系统的稳定性[^4]。
阅读全文