void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) { static uint16_t cnt=0; //jin tai bian liang cnt++; if(cnt==1) { ccr1=HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1); __HAL_TIM_SET_CAPTUREPOLARITY(&htim2,TIM_CHANNEL_1,TIM_INPUTCHANNELPOLARITY_RISING); //__HAL_TIM_SET_CAPTUREPOLARITY(htim,TIM_CHANNEL_2,TIM_INPUTCHANNELPOLARITY_FALLING); } else if(cnt==2) { ccr2=HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1); __HAL_TIM_SET_CAPTUREPOLARITY(&htim2,TIM_CHANNEL_1,TIM_INPUTCHANNELPOLARITY_FALLING); //__HAL_TIM_SET_CAPTUREPOLARITY(htim,TIM_CHANNEL_2,TIM_INPUTCHANNELPOLARITY_RISING); } else if(cnt==3) { ccr3=HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1); __HAL_TIM_SET_CAPTUREPOLARITY(&htim2,TIM_CHANNEL_1,TIM_INPUTCHANNELPOLARITY_RISING); cnt=0; HAL_TIM_IC_Stop_IT(&htim2,TIM_CHANNEL_1); IC_Flag=1; } // HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1); }
时间: 2025-03-17 10:13:03 浏览: 58
STM32 HAL库中 HAL_TIM_IC_CaptureCallback
函数的实现细节
HAL_TIM_IC_CaptureCallback
是 STM32 的 HAL 库中的一个回调函数,主要用于处理 TIM 输入捕获事件。当输入捕获发生时,该函数会被调用以执行用户定义的操作。
实现细节
初始化配置
在使用HAL_TIM_IC_CaptureCallback
前,需先完成 TIM 外设的相关初始化工作。这包括设置输入捕获通道、触发源、滤波器参数等[^1]。回调机制
当输入信号满足设定条件(如上升沿或下降沿),TIM 外设会自动捕捉当前计数值并存储到相应的寄存器中。随后,硬件会产生一个中断请求,进入对应的 ISR (Interrupt Service Routine),最终调用此回调函数[^2]。功能扩展
用户可以在该回调函数中加入自定义逻辑,比如更新全局变量保存最新捕获值、启动其他外设操作或者通知上层应用进行进一步的数据处理。
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1){
uint32_t capturedValue = __HAL_TIM_GET_CAPTURE1(htim);
// 对capturedValue做后续处理...
}
}
计数器极性切换逻辑
在某些应用场景下可能需要动态改变计数器检测边沿的方向(即所谓的“极性”)。可以通过修改对应通道的 CCMR 寄存器来达成这一目的:
- 如果希望切换至上升沿,则应写入特定位使能 ICxPolarity_Rising;
- 若要改为下降沿响应,则相应位置零即可表示ICxPolarity_Falling。
具体代码示例如下所示:
// 切换为下降沿捕获
__HAL_TIM_SET_ICPOLARITY(htim, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_FALLING);
// 或者切换回上升沿捕获
__HAL_TIM_SET_ICPOLARITY(htim, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING);
上述宏定义位于stm32l4xx_hal_tim.h文件之中,提供了便捷的方式去调整各个独立信道上的感应敏感度方向。
相关推荐



















