怎么屏蔽启动TIMx瞬间产生的更新中断?

2020-01-01 17:54发布

可能是我把问题描述的太复杂了,大家没耐心看吧,简化一下就是这样的:

按下一个KEY启动TIM4开始计数,怎么屏蔽掉启动TIM4时产生的那次更新中断(从模式控制更新中断,SMS=110)???因为我只想要溢出更新中断。
按寄存器上写的是要置位URS,我也确确实实置位了,但是怎么屏蔽不掉?

-----------------------------------------------------------------------------------------------

前面有一位仁兄发帖询问怎么用TIM检测USB的复位信号(注:下降沿信号并持续Xms),并通过中断方式通知系统。
我对STM32也非常感兴趣,就顺便想帮这位仁兄实验一下:
我的想法是:用USB复位信号的下降沿启动TIMx,计数Xms后溢出,在更新中断中检测复位信号的状态,如果该信号依然为低则认为USB复位了(点亮LED1);TIMx启动设置为触发模式,计数设置为单脉冲模式(后来因该句导致CNT无法启动就屏蔽此句),即在发生下一次更新的时候停止计数。

我用万利199的板子,我发现TIM4有2个通道的重映射管脚正好落在摇杆按键的LEFT和RIGHT上,所以我想用摇杆按键来模拟USB的复位信号。

现在的症状:我每次按键立即进入更新中断。

如果程序中我没有把CR1寄存器的URS位置一,这是合理的,但是因为我只希望让溢出的时候进更新中断,所以我自己写了几行代码把URS这一位置1。程序运行的时候,URS这一位也确确实实置1了,但是怎么不起作用?
下面我依次贴上   一直没有按键,停止运行后 各个寄存器的配置情况图;
                 按下按键,    再停止运行 各个寄存器的值图
                 还有我的部分代码


(原文件名:keyno截图00.png)


(原文件名:keyyes(KeyDownStop)截图01.png)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
2nd090215
2020-01-02 01:52
u8 readvalue=1;
void TIM4_IRQHandler(void)
{
  if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
  {  
        TIM_ClearITPendingBit(TIM4, TIM_IT_Update );
        readvalue = GPIO_ReadInputDataBit( GPIOD, GPIO_Pin_12 );
          if(readvalue==0)
          {
            GPIO_SetBits(GPIOC, GPIO_Pin_7);
          }
          else
          GPIO_SetBits(GPIOC, GPIO_Pin_6);
    }
  
}

一周热门 更多>