stm8定时器的通道比较模式不能关闭吗?
具体现象是定时器1的通道2,相关寄存器都是复位值。
在定时器的中断响应里,因为有通道2的中断处理函数,我就发现偶尔程序回近通道2的中断处理
__interrupt void TIM1_CAP_COM_IRQHandler(void)
{
if(TIM1->SR1&TIM1_IT_CC1)//通道1采样定时
{
TIM1->SR1 &= (uint8_t)(~(uint8_t)TIM1_IT_CC1);//清除中断标志位
TIM1_SetCompare1(TIM1_GetCounter()+1000);//10ms
SPFlag=1;
}
if(TIM1->SR1&TIM1_IT_CC2)//通道2 每当定时器计数值归0就会进来
{
TIM1->SR1 &= (uint8_t)(~(uint8_t)TIM1_IT_CC2);
}
}
通道2如果不配置,其实一直在比较模式工作,每当定时器1的计时到0,通道2的中断位就置位(因为通道2的比较值也是0)。
除非把通道2配置成输入模式,不然比较值一匹配就会置位通道2中断标志。
通道2中断在启动别的任务时会用到,所以通道2的中断处理函数一定会有。现在是先配置成输入,用的时候配置成输出。关的时候再配置成输入。
一周热门 更多>