打印
[STM32L1]

STM32L152RBT6 TIM2 无法进入捕获中断,求解。

[复制链接]
1645|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
c67890|  楼主 | 2014-10-14 16:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的项目中用到TIM2 的 ch4做为外部波形频率监测,我的代码如下,但是程序始终无法进入中断,同样的代码,用到TIM4 的 CH2上功能就是正常的,无语。再此求助各位,望大家给分析一下原因,谢谢!
/**
  * @ 名            称:TIM2_Configuration
  * @ 功            能:Timer4 初始化,ch4 作为脉冲捕获通道
  * @ 入口参数:none
  * @ 出口参数:none
  */
void TIM2_Configuration(void)
{   
        TIM_ICInitTypeDef  TIM_ICInitStructure;

        GPIO_InitTypeDef GPIO_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

  /* TIM4 clock enable */
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

  /* GPIOB clock enable */
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);

        /* TIM4 channel 2 pin (PB.07) configuration */                                                                       
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_11;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_TIM2);

  /* TIM4 configuration: Input Capture mode ---------------------
         The external signal is connected to TIM4 CH2 pin (PB.07)  
         The Rising edge is used as active edge,
         The TIM4 CCR2 is used to compute the frequency value
  ------------------------------------------------------------ */

        TIM_ICInitStructure.TIM_Channel         = TIM_Channel_4;
        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 = 0x0;
        TIM_ICInit(TIM2, &TIM_ICInitStructure);

        TIM_Cmd(TIM2, ENABLE);                                                                                                                                        // TIM enable counter

  /* Enable the CC2 Interrupt Request */
//        TIM_ITConfig(TIM4, TIM_IT_CC2, ENABLE);                                                                                                         // Enable Timer4 interruption

  /* Enable the TIM4 global Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

}

void TIM2_IRQHandler(void)
{
        if (TIM_GetITStatus(TIM2, TIM_IT_CC4)        != RESET)
        {                       
                TIM_ClearITPendingBit(TIM2, TIM_IT_CC4);                                                                        // Clear TIM4 Capture compare interrupt pending bit       
       
                if(CaptureNumber == 0)
                {                       
                        IC4ReadValue1 = TIM_GetCapture2(TIM2);                                                                        // Get the Input Capture value
                        CaptureNumber = 1;
                }
                else if(CaptureNumber == 1)
                {
                        IC4ReadValue2 = TIM_GetCapture2(TIM2);                                                                 // Get the Input Capture value
                               
                        if (IC4ReadValue2        > IC4ReadValue1)                                                                        // Capture computation
                        {
                                Capture += (IC4ReadValue2 - IC4ReadValue1) - 1;
                                count++;
                        }
                        else if (IC4ReadValue2 < IC4ReadValue1)
                        {
                                Capture += ((0xFFFF - IC4ReadValue1) + IC4ReadValue2) - 1;
                                count++;
                        }
                        else
                        {
                                Capture += 0;
                        }
                        CaptureNumber = 0;
                }
        }
}

沙发
mmuuss586| | 2014-10-14 19:50 | 只看该作者
我试过,CH3,CH4都不支持的;


当然也有可能我的程序不对;

使用特权

评论回复
板凳
c67890|  楼主 | 2014-10-24 11:08 | 只看该作者
mmuuss586 发表于 2014-10-14 19:50
我试过,CH3,CH4都不支持的;

很郁闷啊,找了半天原因也没找到,现在之后飞线到TIM4 的 ch2上先用着,继续找办法解决。谢谢您啦。

使用特权

评论回复
地板
wangyueming1986| | 2014-10-24 16:47 | 只看该作者
TIM_ITConfig(TIM4, TIM_IT_CC2, ENABLE);   ???
这是配置的CH2啊!是这个原因吗?

使用特权

评论回复
5
c67890|  楼主 | 2014-10-29 13:45 | 只看该作者
wangyueming1986 发表于 2014-10-24 16:47
TIM_ITConfig(TIM4, TIM_IT_CC2, ENABLE);   ???
这是配置的CH2啊!是这个原因吗?

谢谢你,不是这个,这里把这句屏蔽掉,是为了以后用的时候再打开,不用了关掉,初始化后的默认状态只是中断开关没打开而已。

使用特权

评论回复
6
tobyking| | 2015-5-22 10:57 | 只看该作者
你好,我在写和你这个程序一样的,要计算频率,我的也无法进入中断,你的问题解决了嘛?求指点

使用特权

评论回复
7
jay8830095| | 2015-10-28 14:56 | 只看该作者
我也在用STM32L152RBT6一起交流下,文档好少呢。

使用特权

评论回复
8
c67890|  楼主 | 2016-1-7 17:12 | 只看该作者
jay8830095 发表于 2015-10-28 14:56
我也在用STM32L152RBT6一起交流下,文档好少呢。

我后来换到了CH2上面,没在弄CH4

使用特权

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

本版积分规则

2

主题

34

帖子

1

粉丝