This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

超声测距,为什么发射一小段超声后会连续收到好几个中断

int main (void)
 {
	SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN); //系统时钟40MHZ

	SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1);//使能TIMER1 32位(TIMER0A16位+TIMER0B16位)
	SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);//使能PWM0模块
	SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);  //使能GPIOB外设


	InitConsole();//配置UART,与距离测试无关
	UARTprintf("******************************************* \n");

	GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_6);//配置PB6为PWM功能

	GPIOPinConfigure(GPIO_PB6_M0PWM0);    //配置PB6为PWM

	SysCtlPWMClockSet(SYSCTL_PWMDIV_1);//PWM时钟

	PWMGenConfigure(PWM0_BASE,PWM_GEN_0,PWM_GEN_MODE_UP_DOWN| PWM_GEN_MODE_NO_SYNC);//配置PWM发生器0:加减计数,不同步

	PWMGenPeriodSet(PWM0_BASE, PWM_GEN_0, 1000);//设置PWM发生器的频率40KHz

	PWMPulseWidthSet(PWM0_BASE, PWM_OUT_0, 500);//设置PWM0/PWM1输出的脉冲宽度,50%占空比

	PWMGenEnable(PWM0_BASE, PWM_GEN_0);//使能PWM发生器


	GPIOPinTypeGPIOInput(GPIO_PORTB_BASE, GPIO_PIN_4);//配置PB4为输入管脚

	GPIOPinConfigure(GPIO_PB4_T1CCP0);    //Timer

	GPIOPinTypeTimer(GPIO_PORTB_BASE, GPIO_PIN_4);//配置PB4为Timer相关

	TimerConfigure(TIMER1_BASE,TIMER_CFG_A_CAP_TIME_UP|TIMER_CFG_SPLIT_PAIR);//计时捕获模式,上升沿捕获

	TimerControlEvent(TIMER1_BASE,TIMER_A,TIMER_EVENT_POS_EDGE);    //捕获模式,A定时器,上升沿捕获

	IntEnable(INT_TIMER1A);  //使能TIMER0A

	TimerIntEnable(TIMER1_BASE, TIMER_CAPA_EVENT);   //定时器A捕获事件触发中断


	IntMasterEnable();//master interrupt enable API for all interrupts

	TimerEnable(TIMER1_BASE, TIMER_A);//TimerEnable(TIMER1_BASE, TIMER_A);

	PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT, true);

	while(ui32Counter < 3)
	{
	    ui32Counter++;
	}
	ui32Counter = 0;

	PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT, false);

	while(1)
	{

    }
 }
void Timer1IntHandler()
{


	TimerFinal = TimerValueGet(TIMER1_BASE,TIMER_A);//Timer开始计时时即为超声波发出的时间,进入中断时为超声波接收到的时间,

	Distance = (TimerFinal/SysCtlClockGet())*17000.0 ;//算出距离

	f_char_printf(Distance);

	UARTprintf(". . .over \n");
	TimerIntClear(TIMER1_BASE,TIMER_CAPA_EVENT);//清除中断标志
}