输入捕获检测到的高电平时间不准

2019-07-20 13:48发布

我按自己的思路写了输入捕获实验,我用的是双边沿捕获:TIM_ICInitStruct.TIM_ICPolarity=TIM_ICPolarity_BothEdge;    但是用LCD显示的时候发现,按一下按键,显示时间是十几秒,有时候连续几次都是十几秒,几十秒,这肯定运行不对啊,改了半天,加了好多语句还是运行不对,不知道哪里出了问题。

u32 Pulse_Wide;// 高电平时间u8 update;     //检测完成标志u8 count=0;  //溢出次数   ,最高位标记检测到一次边沿 void TIM5_IRQHandler(){    u32 timer=0,timer1;            if(TIM_GetITStatus(TIM5, TIM_IT_CC1))             {         if((count&0x80)==0)  //判断之前是否检测到了一次边沿(count最高位标记检测到了一次边沿;)         {             TIM_Cmd(TIM5,DISABLE );             TIM_SetCounter(TIM5, 0);                      TIM_Cmd(TIM5,ENABLE );             //把变量清零                  Pulse_Wide=0;                  count=0;                  update=0;                   timer=0;                  count=(count|0x80);//count最高位标记检测到了一次边沿;         }         else//如果之前检测到了一次边沿         {                                   timer1=TIM_GetCapture1(TIM5);//记录捕获值                  count&=0x7F;  //记录溢出次数。               //计算脉冲宽度                  timer=count;                  timer*=500000;//我设定的溢出周期是500000,即ARR的值。                 timer+=timer1;                  Pulse_Wide=timer;                  timer=0;                 count=0;                 update=1;//标记完成检测,在主函数中清零。         }                  TIM_ClearITPendingBit(TIM5, TIM_IT_CC1);//清零中断标志}        if( TIM_GetITStatus(TIM5, TIM_IT_Update)){             if(update==0)                { if((count&0x80)==1)   //判断是否开始检测高电平时间                   {                         count+=1;       //记录溢出次数                         TIM_ClearITPendingBit(TIM5,TIM_IT_Update);//清零中断标志                   }                }}        }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
卢飞跃
1楼-- · 2019-07-20 17:27
 精彩回答 2  元偷偷看……
卢飞跃
2楼-- · 2019-07-20 19:18
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-07-20 21:25
慢慢调试下了,多搞几天

一周热门 更多>