OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2063|回复: 1

stm32的tim中断出不去

[复制链接]

9

主题

22

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2016-12-29
在线时间
13 小时
发表于 2017-1-3 12:23:24 | 显示全部楼层 |阅读模式
1金钱
主程序
int main(void)
{
        RCC_Configuration();

        GPIO_Configuration();

  NVIC_Configuration();
       
  /* TIM2 configuration: PWM Input mode ------------------------
     The external signal is connected to TIM2 CH2 pin (PA.01),
     The Rising edge is used as active edge,
     The TIM2 CCR2 is used to compute the frequency value
     The TIM2 CCR1 is used to compute the duty cycle value
  ------------------------------------------------------------ */

  TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;  
  TIM_ICInitStructure.TIM_ICFilter = 0x1;  

  TIM_PWMIConfig(TIM2, &TIM_ICInitStructure);  

  TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2);  

  TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);  

  TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);  

  TIM_Cmd(TIM2, ENABLE);  

  TIM_ITConfig(TIM2, TIM_IT_CC2 | TIM_IT_CC1, ENABLE);

  while (1)
        {
                 if(FLAGw==1)
                 {

                  LED2(1);
                  Delay(0x0FFFFF);
                  LED2(0);
                  Delay(0x0FFFFF);

                 }
                 else if(FLAGw==2)
                 {
                    LED1(1);
                  Delay(0x0FFFFF);
                  LED1(0);
                  Delay(0x0FFFFF);

                 }

        }
}

中断函数
void TIM2_IRQHandler()
{
    if(TIM_GetITStatus(TIM2,TIM_IT_CC2)== SET)
                {
                         TIM_ClearITPendingBit(TIM2,TIM_IT_CC2);
                        if(FLAGq==0)
                        {
                                IC1Value = TIM_GetCapture2(TIM2);
                                FLAGq = 1;
                        }
                        else if(FLAGq == 1)
                        {
                                IC2Value = TIM_GetCapture2(TIM2);
                                if(IC2Value > IC1Value)
                                {
                                        CapVal = IC2Value - IC1Value;
                                        FLAGq = 0;
                                }               
                                else
                                {
                                        CapVal = ((0xFFFF -IC1Value) + IC2Value);
                                        FLAGq = 0;
                                }                                       
                       
                       
                        if((CapVal>27000)&&(CapVal<33000))
                        {
                                CapVal = 0;
                                FLAGw = 1;
                        }
                        else if((CapVal>64000)&&(CapVal<65000))
                        {
                                CapVal = 0;
                                FLAGw = 2;
                        }
                }
                }
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

22

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2016-12-29
在线时间
13 小时
 楼主| 发表于 2017-1-3 12:27:26 | 显示全部楼层
FLAGw收到不同信号之后会变1、2,但是LED闪、灭的循环不执行
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-24 04:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表