STM32 同一定时器 两个通道捕获输入

上一个帖子,看到有人在评论区问我代码,那我在这里贴一下吧。有需要的收藏:

这是定时器 通道2、通道3的写法:

//定时器2中断服务程序	 
void TIM2_IRQHandler(void)
{
	
 	if(((TIM2CH2_CAPTURE_STA&0X80)==0)||((TIM2CH3_CAPTURE_STA&0X80)==0))//还未成功捕获	STA第8位,1-捕获成功,0-未捕获成功
	{	 
		if (TIM_GetITStatus(TIM2,TIM_IT_Update)!= RESET)//中断更新
		{	    
			if(TIM2CH2_CAPTURE_STA&0X40)//已经捕获到高电平了
			{
				if((TIM2CH2_CAPTURE_STA&0X3F)==0X3F)//高电平太长了
				{
					TIM2CH2_CAPTURE_STA|=0X80;//标记成功捕获了一次
						TIM2CH2_CCR_Data2=0XFFFF;
				}
				else 
					TIM2CH2_CAPTURE_STA++;			
			}			

			if(TIM2CH3_CAPTURE_STA&0X40)//已经捕获到高电平了
			{
				if((TIM2CH3_CAPTURE_STA&0X3F)==0X3F)//高电平太长了
				{
					TIM2CH3_CAPTURE_STA|=0X80;//标记成功捕获了一次
					TIM2CH3_CCR_Data2=0XFFFF;
				}
				else 
					TIM2CH3_CAPTURE_STA++;			
			}					
	
		}
		
		if (TIM_GetITStatus(TIM2, TIM_IT_CC2)!= RESET)//捕获1发生捕获事件
		{	
			if(TIM2CH2_CAPTURE_STA&0X40)		//捕获到一个下降沿 		
			{	  			
				TIM2CH2_CAPTURE_STA|=0X80;		//标记成功捕获到一次高电平脉宽
				TIM2CH2_CCR_Data2 = TIM2->CCR2;
		   		TIM_OC2PolarityConfig(TIM2,TIM_ICPolarity_Rising); //CC1P=0 设置为上升沿捕获
				
			}
			else  								//还未开始,第一次捕获上升沿
			{
				TIM2CH2_CAPTURE_STA=0;			//清空
				TIM2CH2_CCR_Data1=TIM2->CCR2;
				TIM2CH2_CAPTURE_STA|=0X40;		//标记捕获到了上升沿
		   		TIM_OC2PolarityConfig(TIM2,TIM_ICPolarity_Falling);		//CC1P=1 设置为下降沿捕获
			}		  
         
		}
		
		if (TIM_GetITStatus(TIM2, TIM_IT_CC3)!= RESET)//捕获1发生捕获事件
		{	
			if(TIM2CH3_CAPTURE_STA&0X40)		//捕获到一个下降沿 		
			{	  			
				TIM2CH3_CAPTURE_STA|=0X80;		//标记成功捕获到一次高电平脉宽
				TIM2CH3_CCR_Data2 = TIM2->CCR3;
		   		TIM_OC3PolarityConfig(TIM2,TIM_ICPolarity_Rising); //CC1P=0 设置为上升沿捕获
			
			}
			else  								//还未开始,第一次捕获上升沿
			{
				TIM2CH3_CAPTURE_STA=0;			//清空
				TIM2CH3_CCR_Data1=TIM2->CCR3;
				TIM2CH3_CAPTURE_STA|=0X40;		//标记捕获到了上升沿
		   		TIM_OC3PolarityConfig(TIM2,TIM_ICPolarity_Falling);		//CC1P=1 设置为下降沿捕获
			}		  
         
		}
		
	}
		TIM_ClearITPendingBit(TIM2, TIM_IT_CC2|TIM_IT_CC3|TIM_IT_Update); 

	
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

没有捷径就是最短捷径

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

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

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

打赏作者

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

抵扣说明:

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

余额充值