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左右。看图,请大家帮忙找下原因,谢谢
TIM2_GetCounter();内部已经对计数器清零。 自己找到了原因!通过分析计数值得出TIM2预分频值发生了变化本来16分频变成了1分频,把初始化时直接改成了不分频。但是不明白什么原因造成了预分频值的变化,难道是计数器手动清零 ?如果有高手知道麻烦为我解答。谢谢
页:
[1]