上一个帖子,看到有人在评论区问我代码,那我在这里贴一下吧。有需要的收藏:
这是定时器 通道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);
}