stm32G431定时器输入捕获
时间: 2025-04-19 10:44:19 浏览: 19
### STM32G431 定时器输入捕获使用教程
#### 配置引脚和定时器参数
为了实现定时器输入捕获功能,需先配置相应的GPIO引脚为微定时器模式。对于STM32G431而言,可以选择PA15或PB4作为外部信号输入端口[^1]。
```c
// 初始化 GPIO 引脚 PA15 或 PB4 为 TIM 输入通道
__HAL_RCC_GPIOA_CLK_ENABLE(); // 启用 GPIOA 时钟 (如果选用 PA15)
// __HAL_RCC_GPIOB_CLK_ENABLE(); // 如果选用了 PB4,则启用 GPIOB 时钟
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_15; // 对于 PA15, 若选择 PB4 则改为 GPIO_PIN_4
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF2_TIM2; // 假设使用 TIM2 的 AF2 映射到 PA15/PB4 上
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 更改这里的 GPIOA 至 GPIOB 如适用
```
接着初始化TIM外设并设置其工作方式:
```c
TIM_HandleTypeDef htim;
void MX_TIM2_Init(void){
__HAL_RCC_TIM2_CLK_ENABLE();
htim.Instance = TIM2;
htim.Init.Prescaler = 83; // 设置预分频值以匹配系统时钟频率
htim.Init.CounterMode = TIM_COUNTERMODE_UP;
htim.Init.Period = 65535; // 自由运行计数器周期最大值
htim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim.Init.RepetitionCounter = 0;
if (HAL_TIM_IC_Init(&htim) != HAL_OK){
Error_Handler();
}
sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING; // 边沿触发极性上升沿
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI; // 直接映射 TIx
sConfigIC.ICPrescaler = TIM_ICPSC_DIV1; // 不做额外分频处理
sConfigIC.ICFilter = 0; // 数字滤波关闭
if (HAL_TIM_IC_ConfigChannel(&htim, &sConfigIC, TIM_CHANNEL_1)!= HAL_OK){
Error_Handler();
}
}
```
#### 编写中断服务程序
当发生输入事件时会触发中断,在此期间可通过读取寄存器获取当前时间戳从而计算出脉冲宽度或频率等信息。这里定义了一个简单的回调函数来完成这一过程[^2]。
```c
uint32_t f39=0,f40=0; // 存储两次连续捕捉的时间差值
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim){
static uint32_t previousCaptureValue = 0;
uint32_t currentCaptureValue = 0;
/* 获取最近一次捕获的数据 */
currentCaptureValue = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
if(previousCaptureValue!=currentCaptureValue){
f39=f40;
f40=currentCaptureValue-previousCaptureValue;
previousCaptureValue=currentCaptureValue;
}
}
```
上述代码片段展示了如何通过调用`HAL_TIM_ReadCapturedValue()`函数获得最新的捕获数值,并据此更新全局变量f39和f40中的数据以便后续分析处理。
值得注意的是,在实际项目中可能还需要加入串口通信模块来进行调试输出或其他交互操作;这部分可以通过查阅其他资料了解具体做法[^3]。
阅读全文
相关推荐


















