STM8检测高电平脉冲宽度疑问

2019-07-19 20:52发布

本帖最后由 黄洪文 于 2017-3-24 19:40 编辑

先指定上升沿触发捕获,当发生捕获事件时读取CCR寄存器的值,再改变为下降沿捕获,当再次中断时读取CCR的值与上次的捕获值相减,,,,,这样做对吗?[mw_shl_code=applescript,true]//TIM2捕获中断服务函数
INTERRUPT_HANDLER(TIM2_CAP_COM_IRQHandler, 14)
{
   uint8_t CC2IF;
  static uint8_t TIM2CH2_CAPTURE_STA=0;
   CC2IF=TIM2->SR1;//第二位是 CC2IF: 捕获/比较2 中断标志  0000 0000
   static uint8_t cnt_capture=0;
   if(CC2IF&0x04)//捕获2发生捕获事件
   {        
      if(TIM2CH2_CAPTURE_STA==0) //捕获到一个上升沿                 
      {                  
        TIM2CH2_CAPTURE_STA=1;   //下次捕获的是下降沿
        TIM2CH2_CAPTURE_VAL_High=TIM2->CCR2H;//获取捕获到上升沿时候的值
        TIM2CH2_CAPTURE_VAL_High<<=8;
        TIM2CH2_CAPTURE_VAL_High+=TIM2->CCR2L;
        TIM2->CCER1 |=1<<5;                         //CC2P=1 设置为下降升沿捕获
        cnt_capture++;
      }
      else                                          //还未开始,第一次捕获下降沿
      {
        TIM2CH2_CAPTURE_VAL_Low=TIM2->CCR2H;//获取捕获到下降沿时候的值
        TIM2CH2_CAPTURE_VAL_Low<<=8;
        TIM2CH2_CAPTURE_VAL_Low+=TIM2->CCR2L;      
        TIM2CH2_CAPTURE_STA =0;               
        TIM2->CCER1&=~(1<<5);                        //CC2P=1 设置捕获上升沿  
        cnt_capture++;
      }               
      if(cnt_capture==2)
      {      
        TIM2CH2_CAPTURE_VAL= abs(TIM2CH2_CAPTURE_VAL_Low-TIM2CH2_CAPTURE_VAL_High);
        cnt_capture=0;
      }
  }
  TIM2->SR1&=~(1<<2);//清除捕获中断标志位
}[/mw_shl_code]
但是测试结果不对!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。