声明:本文只是个人笔记,格式风格混乱,内容来源网络、书籍及个人实践,不负任何责任
常用定时器回调函数:
1. void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim);//输入捕获
2. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);//更新中断
3. void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim);//触发中断
4. void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim);//输出比较
输入捕获
正确学习顺序应该是先学习更新中断,但是由于个人原因先接触的捕获中断。
先设置捕获上升还是下降沿
__HAL_TIM_SET_CAPTUREPOLARITY(&htim2,TIM_CHANNEL_3,TIM_INPUTCHANNELPOLARITY_RISING);//上升沿捕获
__HAL_TIM_SET_CAPTUREPOLARITY(&htim2,tim_channel_3,TIM_INPUTCHANNELPOLARITY_BOTHEDGE);//上升下降(但是案例较少,没尝试)
__HAL_TIM_SET_CAPTUREPOLARITY(&htim2,tim_channel_3,TIM_INPUTCHANNELPOLARITY_FALLING);//下降沿捕获
然后设置中断
HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_3);//开启中断
HAL_TIM_IC_Stop_IT(&htim2, TIM_CHANNEL_3);//关闭中断
同样有DMA方式等等,还没去尝试。
网上资料说定时器中断关闭后重置,目前貌似不太一样,中断数字没有重置的感觉,就是一直运行然后溢出再运行。这个后续需要验证一下。如果能重置最好,不能重置需要判定溢出(当然都做溢出判断也没问题)
HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_3);//字面意思,读取捕获值