定时器和GPIO中断

2019-07-20 21:38发布

在使用超声波传感器的时候,发现一个问题,超声波模块能用,示波器所显示的高电平时间长度和测试距离能够对应的上,最后使用的时候用定时器来对数据进行计时则发现所计数的时间不对。具体代码如下以下是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]



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
Sunwaz
2019-07-21 15:58
[mw_shl_code=c,true]float HLSer_GetValue(void)
{
        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]

一周热门 更多>