做了一辆小车,想在进中断后满足一定条件把中断关掉,结果无论是用寄存器还是库函数,程序都很容易跑飞,求大神指导!!!
/**
* @brief 前面的灰度
* @param None
* @retval None
*/
void HD2_IRQHandler(void)
{
if(EXTI_GetITStatus(HD2_INT_EXTI_LINE)!=RESET)
{
SysTick_Delay_ms(85);
if(EXTI_GetITStatus(HD2_INT_EXTI_LINE)!=RESET)
{
EXTI_ClearITPendingBit(HD2_INT_EXTI_LINE);
a = 1; //进中断标志位
TIM_SetCounter(TIM6,0);
TIM_ITConfig(BASIC_TIM,TIM_IT_Update,ENABLE); // 开启计数器中断
if(hit == 1) //检测到人,撞到边
{
LED9_ON;
hit = 0; //清掉检测到人的位
speedset(110,90,90,110);
Back;
SysTick_Delay_ms(800);
hit = 0; //清掉检测到人的位
filter(); //重新测值,否则继续直行
for(i=0;i<13;i++)
{
value[i]= GetVolt(ADC_ConvertedValueLocal[i]);
}
LED9_OFF;
}
else //没检测到人
{
if(b == 1) //前后都检测到
{
// speedset(50,40,40,50);
Left;
filter(); //重新测值,否则继续直行
for(i=0;i<13;i++)
{
value[i]= GetVolt(ADC_ConvertedValueLocal[i]);
}
// EXTI->IMR = 0; //取消外部中断 【【 加上会卡死 】】
// EXTI_DeInit();
flag2 = 1;
flag3 = 1;
}
else //最平常的情况,一边检测到
{
Back;
}
}
}
}
}
/**
* @brief 后面的灰度
* @param None
* @retval None
*/
void HD1_IRQHandler(void)
{
if(EXTI_GetITStatus(HD1_INT_EXTI_LINE)!=RESET)
{
SysTick_Delay_ms(85);
if(EXTI_GetITStatus(HD1_INT_EXTI_LINE)!=RESET)
{
EXTI_ClearITPendingBit(HD1_INT_EXTI_LINE); //清除中断标志位
b = 1; //进中断标志位
TIM_SetCounter(TIM6,0);
TIM_ITConfig(BASIC_TIM,TIM_IT_Update,ENABLE); // 开启计数器中断
if(hit == 1) //检测到人,撞到边
{
LED9_ON;
hit = 0; //清掉检测到人的位
speedset(110,90,90,110);
Straight;
SysTick_Delay_ms(800);
hit = 0; //清掉检测到人的位
filter(); //重新测值,否则继续直行
for(i=0;i<13;i++)
{
value[i]= GetVolt(ADC_ConvertedValueLocal[i]);
}
LED9_OFF;
}
else //没检测到人
{
if(a == 1) //前后都检测到
{
// speedset(50,40,40,50);
Right;
filter(); //重新测值,否则继续直行
for(i=0;i<13;i++)
{
value[i]= GetVolt(ADC_ConvertedValueLocal[i]);
}
// EXTI->IMR = 0; //取消外部中断 【【 加上会卡死 】】
// EXTI_DeInit();
flag2 = 1;
flag3 = 1;
}
else //最平常的情况,一边检测到
{
Straight;
}
}
}
}
}
/**
* @brief TIM6定时器中断
* @param None
* @retval None
*/
void BASIC_TIM_IRQHandler (void)
{
LED10_ON;
SysTick_Delay_ms(100);
a = 0;
b = 0;
LED10_OFF;
TIM_ITConfig(BASIC_TIM,TIM_IT_Update,DISABLE); // 关闭计数器中断
TIM_ClearITPendingBit(BASIC_TIM , TIM_FLAG_Update); //清除中断标志位
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>