在使用超声波传感器的时候,发现一个问题,超声波模块能用,示波器所显示的高电平时间长度和测试距离能够对应的上,最后使用的时候用定时器来对数据进行计时则发现所计数的时间不对。具体代码如下以下是GPIO的初始化
[mw_shl_code=c,true]static void HLSer_GPIO_Config(void)
{
GPIO_InitTypeDef InitStructure;
RCC_AHB1PeriphClockCmd(HLSer_Trig_GPIO_Clk | HLSer_Echo_GPIO_Clk,ENABLE);
InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
InitStructure.GPIO_OType = GPIO_OType_PP;
InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
InitStructure.GPIO_Mode = GPIO_Mode_OUT;
InitStructure.GPIO_Pin = HLSer_Trig_GPIO_Pin;
GPIO_Init(HLSer_Trig_GPIO_Port,&InitStructure);
InitStructure.GPIO_Pin = HLSer_Echo_GPIO_Pin;
InitStructure.GPIO_Mode = GPIO_Mode_IN;
InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(HLSer_Echo_GPIO_Port,&InitStructure);
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
[mw_shl_code=applescript,true] static void ULSer_EXTI_Config(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);
SYSCFG_EXTILineConfig(HLSer_EXTI_PortSource,
HLSer_EXTI_PinSource);
EXTI_InitStructure.EXTI_Line = HLSer_EXTI_Line;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_Init(&EXTI_InitStructure);
}[/mw_shl_code]
[mw_shl_code=c,true]static void HLSer_NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = HLSer_EXTI_IRQ;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_Init(&NVIC_InitStructure);
}[/mw_shl_code]
[mw_shl_code=c,true]void HLSer_EXTI_IRQHandler(void)
{
if(EXTI_GetITStatus(HLSer_EXTI_Line) != RESET)
{
TIM_Cmd(TIM6,DISABLE);
HLSer_User.Count = TIM_GetCounter(TIM6);
TIM_SetCounter(TIM6,0);
Interrupt_Flag.HLSer_Flag = SET;
//TIM_Cmd(TIM6,ENABLE);
}
EXTI_ClearITPendingBit(HLSer_EXTI_Line);
}[/mw_shl_code]
{
HLSer_Trig_Out = 1;
Delay_us(20);
HLSer_Trig_Out = 0;
//ULSer_EXTI_Cmd(ENABLE);
while(HLSer_Echo_In != SET);
TIM_SetCounter(TIM6,0);
TIM_Cmd(TIM6,ENABLE);
while(Interrupt_Flag.HLSer_Flag != SET);
Interrupt_Flag.HLSer_Flag = RESET;
HLSer_User.length = (HLSer_User.Count) *3.4/ 100;
//ULSer_EXTI_Cmd(DISABLE);
return HLSer_User.length;
}[/mw_shl_code]
一周热门 更多>