TIM1->SR&=~(1<<1);//清CC1IF位。(捕获比较1通道中断标志) TIM1->CCMR1=0x3030;//通道1和2为输出翻转模式 TIM1->DIER&=~(1<<1); //捕获比较1通道中断禁止 TIM1->DIER|=(1<<2); //捕获比较2通道中断允许
TIME配置的代码里有上面部分了,照理说当CNT与CCR1相等时SR中的CC1IF不会置位才是,可是我通过第二个通道的中断进入中断函数里面通过试验吃惊地发现它还是不停地置1。也就是说它置位的条件就是CNT与CCR1发生匹配,与是否允许中断无关。只要还是比较匹配模式。我的中断如下: void TIM1_CC_IRQHandler(void) { if(TIM1->SR&(1<<2)) { TIM1->SR&=~(1<<2);//清除
} if(TIM1->SR&(1<<1)) { TIM1->SR&=~(1<<1);//清除 } } 因为我的中断函数里查询每个通道的中断标志来对每路输出的脉冲记数的。所以如果我关了第一路的引脚输出,但是没法阻止它但是它在里面还是会匹配中断,这样第二个通道匹配中断的时候也会进入第一路的中断入口,导致我记数不准。
打听下这是TIME的问题还是我的问题。 |