HAL库输入捕获

踩了个坑 

定时器中断的正确写法!!!

HAL_TIM_IC_CaptureCallback(&htimx)

发现回调函数没有反应时,可以进入stm32f1xx_it.c中查看其对应的中断函数,如:TIM1_CC_IRQHandler

硬件配置参考:y​​​​​​​https://blog.csdn.net/as480133937/article/details/99407485https://blog.csdn.net/as480133937/article/details/99407485icon-default.png?t=LA92https://blog.csdn.net/as480133937/article/details/99407485

参考博客中步骤可以简化为如下


while (1)
{
    /* USER CODE END WHILE */
 
    /* USER CODE BEGIN 3 */
  switch (capture_Cnt){
	case 0:
		capture_Cnt++;
		__HAL_TIM_SET_CAPTUREPOLARITY(&htim5, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING);
		HAL_TIM_IC_Start_IT(&htim5, TIM_CHANNEL_1);	//启动输入捕获       或者: __HAL_TIM_ENABLE(&htim5);
		break;
	}


/* USER CODE BEGIN 4 */
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	
	if(TIM5 == htim->Instance)
	{
		switch(capture_Cnt){
			case 1:
				capture_Buf[0] = HAL_TIM_ReadCapturedValue(&htim5,TIM_CHANNEL_1);//获取当前的捕获值.
				__HAL_TIM_SET_CAPTUREPOLARITY(&htim5,TIM_CHANNEL_1,TIM_ICPOLARITY_FALLING);  //设置为下降沿捕获
				capture_Cnt++;
				break;
			case 2:
				capture_Buf[1] = HAL_TIM_ReadCapturedValue(&htim5,TIM_CHANNEL_1);//获取当前的捕获值.
				HAL_TIM_IC_Stop_IT(&htim5,TIM_CHANNEL_1); //停止捕获 
	        	high_time = capture_Buf[1]- capture_Buf[0];    //高电平时间
	        	HAL_UART_Transmit(&huart1, (uint8_t *)high_time, 1, 0xffff);   //发送高电平时间
	        	HAL_Delay(1000);   //延时1S
	        	capture_Cnt = 0;  //清空标志位
		}
	
	}
	
}
/* USER CODE END 4 */

经过测试,该代码没有考虑定时器溢出,于是补充定时器溢出回调函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)  //溢出中断函数
{
	if(TIM1==htim->Instance)
	{
		if(capture_Cnt==2){
				capture_flow++;
		}
	}
}

不要忘记在使用溢出中断前添加以下函数


	HAL_TIM_Base_Start_IT(&htim1); //使能定时器,开启中断,使用溢出中断必需要

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vampire_zhou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值