打印

不得不说,STM32 TIME1比较匹配的问题

[复制链接]
4226|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
w75815895|  楼主 | 2008-12-19 21:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 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的问题还是我的问题。
沙发
香水城| | 2008-12-19 23:06 | 只看该作者

中断允许位只是开放产生中断的通道,但并不控制产生中断

请看STM32技术参考手册中的说明,这是翻译稿的截图,你可以对照英文原稿查阅:

使用特权

评论回复
板凳
w75815895|  楼主 | 2008-12-20 09:59 | 只看该作者

RE

看来只有把暂时不用输出的通道置为输入捕获才行,不过还不知道这样有什么后遗症。
如果它的每个比较通道都有一个独立的中断函数入口就好了。

使用特权

评论回复
地板
香水城| | 2008-12-20 10:04 | 只看该作者

你只需要在中断中检查CCxIF位之前,确认是否设置了CCxIE位即

如果没有设置CCxIE位,则未开放对应通道的中断,因此此次中断不可能来自这个通道,随后检测对应的CCxIF位也就没有意义了。

使用特权

评论回复
5
w75815895|  楼主 | 2008-12-20 10:10 | 只看该作者

RE

这样也可行,还没知道CCXIE位是否可读。如不可读那就加个变量操作了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

151

主题

194

帖子

0

粉丝