
设置双沿触发中断,进入中断后获取定时器计数,并清零计数器。但是获得的计数值和我的实际信号宽度不一致。请大家帮我看一下程序,谢谢 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[i]=TIM_CNT_16; i++; if(i==64) i=0; } PB0端口输出宽度与输入信号一致,但是计数器值不正常。信号宽度为500us左右。看图,请大家帮忙找下原因,谢谢 |
评分
查看全部评分