F407同时捕获高低电平问题

2019-07-20 19:01发布

本帖最后由 canghaiwuhen 于 2016-11-7 17:34 编辑

用原子哥的例程捕获高电平时间没问题,将上升沿和下降沿互换捕获低电平时间也没问题
但想同时捕获高低电平时间该怎么做?
TIM2CH1_CAPTURE_VAL1 捕获的高电平时间没问题,但TIM2CH1_CAPTURE_VAL2捕获的低电平时间偏差很大

[mw_shl_code=c,true]                if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)//捕获1发生捕获事件
                {
                        if (TIM2CH1_CAPTURE_STA & 0X40)                //捕获到一个下降沿                 
                        {
                                TIM2CH1_CAPTURE_STA |= 0X80;                //标记成功捕获到一次高电平脉宽
                                TIM2CH1_CAPTURE_VAL1 = TIM_GetCapture1(TIM2);//获取当前的捕获值.
                                TIM_SetCounter(TIM2, 0);
                                TIM_OC1PolarityConfig(TIM2, TIM_ICPolarity_Rising); //CC1P=0 设置为上升沿捕获
                        }
                        else                                                                  //还未开始,第一次捕获上升沿
                        {
                                //TIM2CH1_CAPTURE_STA = 0;                        //清空
                                //TIM2CH1_CAPTURE_VAL = 0;
                                TIM2CH1_CAPTURE_STA |= 0X40;                //标记捕获到了上升沿
                                TIM2CH1_CAPTURE_VAL2 = TIM_GetCapture1(TIM2);//获取当前的捕获值.
                                //TIM_Cmd(TIM2, DISABLE);         //关闭定时器2
                                TIM_SetCounter(TIM2, 0);
                                TIM_OC1PolarityConfig(TIM2, TIM_ICPolarity_Falling);                //CC1P=1 设置为下降沿捕获
                                //TIM_Cmd(TIM2, ENABLE);         //使能定时器2
                        }[/mw_shl_code]
补充:只有一个IO口,不能用双引脚双沿捕获方式


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。