灬玄★冰灬 发表于 2017-9-2 16:20:00

stm8l外部中断计数出错

设置双沿触发中断,进入中断后获取定时器计数,并清零计数器。但是获得的计数值和我的实际信号宽度不一致。请大家帮我看一下程序,谢谢

void TIM2_Init()
{
TIM2_CR1_bit.CEN = 0;   //stop tim1
TIM2_PSCR = TIM2_Prescaler_16;      ////设置预分频数值为16,定时器时钟= 1MHz

TIM2_ARRH = 0xf1;         
TIM2_ARRL = 0xf4;
TIM2_CR1_bit.CMS = 0;   //
TIM2_CR1_bit.DIR = 0;   //设置定时器1的计数方式为向上计数
TIM2_CNTRH =0x00;         //清除计数器
TIM2_CNTRL =0x00;         //
TIM2_IER_bit.UIE = 1;          //使能更新中断
TIM2_CR1_bit. ARPE = 1;      //设置允许自动更新
TIM2_CR1_bit. CEN = 1;         //使能定时器1开始计数
}

#pragma vector = EXTI2_vector         //PD端口中断向量号
__interrupt void GPIOB_IRQHandler(void)
{
PB_ODR^= 0x01 ;
EXTI_ClearITPendingBit(EXTI_IT_Pin2);

   if(ID_Finish_Flag!=1)
        {

    TIM_CNT_16 =TIM2_GetCounter();

    TIM_CNT_16_buf=TIM_CNT_16;
    i++;
    if(i==64)
      i=0;
}

PB0端口输出宽度与输入信号一致,但是计数器值不正常。信号宽度为500us左右。看图,请大家帮忙找下原因,谢谢

灬玄★冰灬 发表于 2017-9-2 16:21:48

TIM2_GetCounter();内部已经对计数器清零。

灬玄★冰灬 发表于 2017-9-2 17:36:31

自己找到了原因!通过分析计数值得出TIM2预分频值发生了变化本来16分频变成了1分频,把初始化时直接改成了不分频。但是不明白什么原因造成了预分频值的变化,难道是计数器手动清零 ?如果有高手知道麻烦为我解答。谢谢
页: [1]
查看完整版本: stm8l外部中断计数出错