4# 香水城
这是我写的程序:
TIM2_SMCR |= 0<<TIM_SMS_BIT ; //定时器内部时钟源使能
//捕获部分配置
halGpioConfig(PORTA_PIN(0),GPIOCFG_IN);//PB6引脚设置为浮空输入,作为捕获输入引脚
TIM2_CCMR1 |= 1<<TIM_CC1S_BIT; //通道设为输入,并且映射到TI1上,只有通道关闭时
//才能写TIM_CC1S(TIMx_CCER寄存器中TIM_CC1E=0)时
TIM2_CCMR1 |= 15<<TIM_IC1F_BIT; //输入滤波
TIM2_CCER &= ~TIM_CC1P; //上升沿捕获,IC1不取反
// TIM2_CCMR1 |= 1<<TIM_IC1PSC_BIT;//每2个事件捕获一次
TIM2_CR1 |= TIM_CEN; //开启计数器
INT_TIM2CFG |= INT_TIMCC1IF;//使能捕获中断
INT_CFGSET |= INT_TIM2; //使能定时器中断
TIM2_CCER |= TIM_CC1E; //CC1捕获使能,使能从计数器到捕获寄存器的捕获
INTERRUPTS_ON(); //开启全局中断
INT_TIM2FLAG = 0xFFFF; //清除中断标志位
void halTimer2Isr()//中断服务程序
{
TIM2_CR1 &= ~TIM_CEN; //关闭计数器
INT_TIM2FLAG |= INT_TIMCC1IF; //清除中断标志位
INT_TIM2MISS |= INT_TIMMISSCC1IF;//清除中断错失标志位
halToggleLed(LED_D3); //LED翻转
TIM2_CR1 |= TIM_CEN; //开启计数器
TIM2_CNT=0; //清除计数器
}
我把断点设置在中断服务程序的第二行,进入中断后,需要一定的时间12个时钟周期,再加上这句TIM2_CR1 &= ~TIM_CEN; 是6个时钟周期,请香版主帮我看看,您说的第二种可能性也存在,但是如果是那样的话,计数器的值应该比捕获值大的数值不应该总是一个固定的数值吧,请香版主再帮我看看,谢谢!
|