我是照着网上前辈们的程序改的,超声波模块用的HC-SR04,PE11用于发送20us脉冲,PE3开中断用于接收测距后反馈的高电平,并且这个中断也是可以进入的。
所以我认为问题出在定时器的计数上面,但是我经过反复比对,没有发现有哪里纰漏的地方。希望各路大神的指点。
挑了一些比较自己觉得比较关键的代码
这个是始终初始化的
[mw_shl_code=applescript,true]void TIM3_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
TIM_TimeBaseInitStructure.TIM_Period = arr;
TIM_TimeBaseInitStructure.TIM_Prescaler=psc;
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_ClockDivision=0;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
TIM_ClearFlag(TIM3, TIM_FLAG_Update);
TIM_ITConfig(TIM3,TIM_IT_Update|TIM_IT_Trigger,ENABLE);
//TIM_ITConfig(TIM3,TIM_IT_Trigger,ENABLE);
NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM3,DISABLE);
}[/mw_shl_code]
这个是中断的
[mw_shl_code=applescript,true]void EXTI3_IRQHandler(void)
{
delay_ms(10);
TIM_SetCounter(TIM3,0);
TIM_Cmd(TIM3,ENABLE);
while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3))
{
;
}
TIM_Cmd(TIM3,DISABLE);
Distance = TIM_GetCounter(TIM3)*340/200.0;
EXTI_ClearITPendingBit(EXTI_Line3);
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
先确认TIM_Cmd(TIM3,ENABLE);能否让定时器正常运行。
然后再确认是否能正常进入外部中断。
一周热门 更多>