[stm32]stm32F4输入捕获原理

捕获原理

在这里插入图片描述
假如我们要捕获如图所示波形的脉宽。
1.先设置定时器为向上计数模式
2.设置定时器的采样通道channelx为上升下降沿捕获,所以在t1时刻,上升沿就会捕获到当前CNT的值,随即将CNT清零
3.在t2时刻下降沿会捕获CNT的值,记为CCRx2
4.根据定时器的频率,以及期间溢出的次数,即可算出|t1-t2|的时间,从而得到高电平脉宽。如,在高电平期间采样定时器共溢出N次,则总的计数次数为N*ARR+CCRx2
5.再捕获一次上升沿,即可求出一个波形的周期、频率以及占空比等信息
根据项目需要调节采样定时器的分辨率。如果需要精确采样的话,可以提高采样定时器的分辨率;反之则降低采样定时器的分辨率。

捕获定时器配置部分直接使用stm32cubeMX进行配置咯。
自己需要写的就是捕获中断回调和定时器更新中断回调即可:

/* 
	* bit7:0,没有成功的捕获;1,成功捕获到一次.
	* bit6:0,还没捕获到低电平;1,已经捕获到低电平了.
	* bit5-bit0:捕获低电平后溢出的次数
	* /
u8 TIM5CH1_CAPTURE_STA=0; //输入捕获状态
u32 TIM5CH1_CAPTURE_VAL;//输入捕获值(TIM2/TIM5 是 32 位)
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
	if((TIM5CH1_CAPTURE_STA&0X80)==0){//还未成功捕获
		if(TIM5CH1_CAPTURE_STA&0X40){//已经捕获到高电平了
			if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F){//高电平太长了
				TIM5CH1_CAPTURE_STA|=0X80; //标记成功捕获了一次
				TIM5CH1_CAPTURE_VAL=0XFFFFFFFF;
			}
			else{
				 TIM5CH1_CAPTURE_STA++;
			 }
		}
	}
}

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim){
	if((TIM5CH1_CAPTURE_STA&0X80)==0){//还未成功捕获
		if(TIM5CH1_CAPTURE_STA&0X40){ //捕获到一个下降沿
			TIM5CH1_CAPTURE_STA|=0X80; //标记成功捕获到一次高电平脉宽
			TIM5CH1_CAPTURE_VAL=HAL_TIM_ReadCapturedValue(&htim5,TIM_CHANNEL_1);//获取当前的捕获值.
			TIM_RESET_CAPTUREPOLARITY(&htim5,TIM_CHANNEL_1); //清除设置
			TIM_SET_CAPTUREPOLARITY(&htim5,TIM_CHANNEL_1,TIM_ICPOLARITY_RISING);//上升沿捕获
		}
		else{ //还未开始,第一次捕获上升沿
			TIM5CH1_CAPTURE_STA=0; //清空
			TIM5CH1_CAPTURE_VAL=0;
			TIM5CH1_CAPTURE_STA|=0X40; //标记捕获到了上升沿
			__HAL_TIM_DISABLE(&htim5); //关闭定时器 5
			__HAL_TIM_SET_COUNTER(&htim5,0);
			TIM_RESET_CAPTUREPOLARITY(&htim5,TIM_CHANNEL_1); //清除原来设置
			TIM_SET_CAPTUREPOLARITY(&htim5,TIM_CHANNEL_1,TIM_ICPOLARITY_FALLING);//下降沿捕获
			__HAL_TIM_ENABLE(&htim5);//使能定时器 5
		}
	}
}
  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值