新手上路
- 积分
- 22
- 金钱
- 22
- 注册时间
- 2018-9-16
- 在线时间
- 3 小时
|

楼主 |
发表于 2018-9-16 22:41:49
|
显示全部楼层
// 2 PA6 TIM3_CH1
// 3 PA7 TIM3_CH2
// 4 PB0 TIM3_CH3
// 5 PB1 TIM3_CH4
u8 TIM3CH1_CAPTURE_STA=0; //输入捕获状态
u16 TIM3CH1_CAPTURE_VAL; //输入捕获值
u8 TIM3CH2_CAPTURE_STA=0; //输入捕获状态
u16 TIM3CH2_CAPTURE_VAL; //输入捕获值
u8 TIM3CH3_CAPTURE_STA=0; //输入捕获状态
u16 TIM3CH3_CAPTURE_VAL; //输入捕获值
u8 TIM3CH4_CAPTURE_STA=0; //输入捕获状态
u16 TIM3CH4_CAPTURE_VAL; //输入捕获值
void TIM3_IRQHandler(void)
{
// 2 PA6 TIM3_CH1
if((TIM3CH1_CAPTURE_STA&0X80)==0)//还未成功捕获
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
{
if(TIM3CH1_CAPTURE_STA&0X40)//已经捕获到高电平了
{
if((TIM3CH1_CAPTURE_STA&0X3F)==0X3F)//高电平太长了
{
TIM3CH1_CAPTURE_STA|=0X80;//标记成功捕获了一次
TIM3CH1_CAPTURE_VAL=0XFFFF;
}else TIM3CH1_CAPTURE_STA++;
}
}
if (TIM_GetITStatus(TIM3, TIM_IT_CC1) != RESET)//捕获1发生捕获事件
{
if(TIM3CH1_CAPTURE_STA&0X40) //捕获到一个下降沿
{
TIM3CH1_CAPTURE_STA|=0X80; //标记成功捕获到一次高电平脉宽
TIM3CH1_CAPTURE_VAL=TIM_GetCapture1(TIM3);
TIM_OC1PolarityConfig(TIM3,TIM_ICPolarity_Rising); //CC1P=0 设置为上升沿捕获
}else //还未开始,第一次捕获上升沿
{
TIM3CH1_CAPTURE_STA=0; //清空
TIM3CH1_CAPTURE_VAL=0;
TIM_SetCounter(TIM3,0); // 计数器设置为0,开始计数
TIM3CH1_CAPTURE_STA|=0X40; //标记捕获到了上升沿
TIM_OC1PolarityConfig(TIM3,TIM_ICPolarity_Falling); //CC1P=1 设置为下降沿捕获,等待下降沿到来
}
}
}
TIM_ClearITPendingBit(TIM3, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位
// 3 PA7 TIM3_CH2
if((TIM3CH2_CAPTURE_STA&0X80)==0)//还未成功捕获
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
{
if(TIM3CH2_CAPTURE_STA&0X40)//已经捕获到高电平了
{
if((TIM3CH2_CAPTURE_STA&0X3F)==0X3F)//高电平太长了
{
TIM3CH2_CAPTURE_STA|=0X80;//标记成功捕获了一次
TIM3CH2_CAPTURE_VAL=0XFFFF;
}else TIM3CH2_CAPTURE_STA++;
}
}
if (TIM_GetITStatus(TIM3, TIM_IT_CC2) != RESET)//捕获1发生捕获事件
{
if(TIM3CH2_CAPTURE_STA&0X40) //捕获到一个下降沿
{
TIM3CH2_CAPTURE_STA|=0X80; //标记成功捕获到一次高电平脉宽
TIM3CH2_CAPTURE_VAL=TIM_GetCapture2(TIM5);
TIM_OC2PolarityConfig(TIM3,TIM_ICPolarity_Rising); //CC2P=0 设置为上升沿捕获
}else //还未开始,第一次捕获上升沿
{
TIM3CH2_CAPTURE_STA=0; //清空
TIM3CH2_CAPTURE_VAL=0;
TIM_SetCounter(TIM3,0); // 计数器设置为0,开始计数
TIM3CH2_CAPTURE_STA|=0X40; //标记捕获到了上升沿
TIM_OC2PolarityConfig(TIM3,TIM_ICPolarity_Falling); //CC2P=1 设置为下降沿捕获,等待下降沿到来
}
}
}
TIM_ClearITPendingBit(TIM3, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位
// 4 PB0 TIM3_CH3
if((TIM3CH3_CAPTURE_STA&0X80)==0)//还未成功捕获
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
{
if(TIM3CH3_CAPTURE_STA&0X40)//已经捕获到高电平了
{
if((TIM3CH3_CAPTURE_STA&0X3F)==0X3F)//高电平太长了
{
TIM3CH3_CAPTURE_STA|=0X80;//标记成功捕获了一次
TIM3CH3_CAPTURE_VAL=0XFFFF;
}else TIM3CH3_CAPTURE_STA++;
}
}
if (TIM_GetITStatus(TIM3, TIM_IT_CC3) != RESET)//捕获1发生捕获事件
{
if(TIM3CH3_CAPTURE_STA&0X40) //捕获到一个下降沿
{
TIM3CH3_CAPTURE_STA|=0X80; //标记成功捕获到一次高电平脉宽
TIM3CH3_CAPTURE_VAL=TIM_GetCapture3(TIM3);
TIM_OC3PolarityConfig(TIM3,TIM_ICPolarity_Rising); //CC3P=0 设置为上升沿捕获
}else //还未开始,第一次捕获上升沿
{
TIM3CH3_CAPTURE_STA=0; //清空
TIM3CH3_CAPTURE_VAL=0;
TIM_SetCounter(TIM3,0); // 计数器设置为0,开始计数
TIM3CH3_CAPTURE_STA|=0X40; //标记捕获到了上升沿
TIM_OC3PolarityConfig(TIM3,TIM_ICPolarity_Falling); //CC3P=1 设置为下降沿捕获,等待下降沿到来
}
}
}
TIM_ClearITPendingBit(TIM3, TIM_IT_CC3|TIM_IT_Update); //清除中断标志位
// 5 PB1 TIM3_CH4
if((TIM3CH4_CAPTURE_STA&0X80)==0)//还未成功捕获
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
{
if(TIM3CH4_CAPTURE_STA&0X40)//已经捕获到高电平了
{
if((TIM3CH4_CAPTURE_STA&0X3F)==0X3F)//高电平太长了
{
TIM3CH4_CAPTURE_STA|=0X80;//标记成功捕获了一次
TIM3CH4_CAPTURE_VAL=0XFFFF;
}else TIM3CH4_CAPTURE_STA++;
}
}
if (TIM_GetITStatus(TIM3, TIM_IT_CC4) != RESET)//捕获1发生捕获事件
{
if(TIM3CH4_CAPTURE_STA&0X40) //捕获到一个下降沿
{
TIM3CH4_CAPTURE_STA|=0X80; //标记成功捕获到一次高电平脉宽
TIM3CH4_CAPTURE_VAL=TIM_GetCapture4(TIM3);
TIM_OC4PolarityConfig(TIM3,TIM_ICPolarity_Rising); //CC4P=0 设置为上升沿捕获
}else //还未开始,第一次捕获上升沿
{
TIM3CH4_CAPTURE_STA=0; //清空
TIM3CH4_CAPTURE_VAL=0;
TIM_SetCounter(TIM3,0); // 计数器设置为0,开始计数
TIM3CH4_CAPTURE_STA|=0X40; //标记捕获到了上升沿
TIM_OC4PolarityConfig(TIM3,TIM_ICPolarity_Falling); //CC4P=1 设置为下降沿捕获,等待下降沿到来
}
}
}
TIM_ClearITPendingBit(TIM3, TIM_IT_CC4|TIM_IT_Update); //清除中断标志位
} |
|