打印
[STM32]

求教:stm32F030 定时器怎么进不来中断?

[复制链接]
6614|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sisyphos|  楼主 | 2014-3-22 15:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sisyphos 于 2014-3-22 15:32 编辑

定时器1 channel4,采用输入捕获模式
初始化如下:
void Tim1Init(void)
{
    //端口PA11初始化
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);                //使能PA端口时钟
        
        GPIO_InitTypeDef GPIO_InitStruct;
        GPIO_InitStruct.GPIO_Pin = SIGNAL_CAPTURE_PIN;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;                //悬空输入
        GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(SIGNAL_CAPTURE_PORT,&GPIO_InitStruct);

        //Tim1,AF功能配置
        GPIO_PinAFConfig(SIGNAL_CAPTURE_PORT,SIGNAL_CAPTURE_PIN,GPIO_AF_2);
   
    //Tim1初始化
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);                   // 使能时钟单元
        TIM_PrescalerConfig(TIM1, TIM1_CLK_DIV_NUM, TIM_PSCReloadMode_Immediate);            
        TIM_SetAutoreload(TIM1, TIM1_WORK_RELOAD_NUM);                                       //  

        TIM_ICInitTypeDef TIM1_ICInitStruct;
        
        TIM1_ICInitStruct.TIM_Channel = TIM_Channel_4;
        TIM1_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Rising;
        TIM1_ICInitStruct.TIM_ICSelection = TIM_ICSelection_DirectTI;        
        TIM1_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;
        TIM1_ICInitStruct.TIM_ICFilter = 0x0;                                

        TIM_ICInit(TIM1,&TIM1_ICInitStruct);

        TIM1->SR = 0;
        TIM_ITConfig(TIM1, TIM_IT_CC4, ENABLE);
        TIM_Cmd(TIM1, ENABLE);                        //使能定时器

}

void TIM1_CC_IRQHandler(void)
{
        INT32 tempccr = 0;
        INT32 capturedata = 0;
        INT32 err;
        
        if (TIM_GetITStatus(TIM1,TIM_IT_CC4))
        {
                TIM_ClearFlag(TIM1, TIM_IT_CC4);
        
                tempccr = TIM_GetCapture4(TIM1);                //获取当前捕获的计数值
        }
}
static void _system_IntSet(void)
{  
  __set_PRIMASK(1);//关中断

  NVIC_InitTypeDef NVIC_InitStructure;   

  NVIC_InitStructure.NVIC_IRQChannel =  TIM1_CC_IRQn;  //TIM1_BRK_UP_TRG_COM_IRQn,  TIM1_CC_IRQn
  NVIC_InitStructure.NVIC_IRQChannelPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

相关帖子

沙发
sisyphos|  楼主 | 2014-3-22 15:25 | 只看该作者
用示波器量过IO口PA11,是有方波信号的,约200KHz,但是死活不进中断,一次都没有,求教高手

使用特权

评论回复
板凳
airwill| | 2014-3-23 09:04 | 只看该作者
是不是跟这个设置有关?

static void _system_IntSet(void)
{  
  __set_PRIMASK(1);//关中断

使用特权

评论回复
地板
sisyphos|  楼主 | 2014-3-24 09:18 | 只看该作者
airwill 发表于 2014-3-23 09:04
是不是跟这个设置有关?

static void _system_IntSet(void)

应该不是这个问题,我开了tim16用的是更新中断,是可以正常进中断的。

使用特权

评论回复
5
shangwei4444| | 2014-3-24 16:45 | 只看该作者
建议把别的无关代码都屏蔽,其他中断都关掉,看看能不能进。

使用特权

评论回复
6
hehui000| | 2014-3-27 09:53 | 只看该作者
我也碰到过这个问题,应该是AF设置时, GPIO_PinAFConfig(SIGNAL_CAPTURE_PORT,SIGNAL_CAPTURE_PIN,GPIO_AF_2);SIGNAL_CAPTURE_PIN应该为GPIO_PinSource11而不是GPIO_Pin_11

使用特权

评论回复
7
sisyphos|  楼主 | 2014-3-27 10:00 | 只看该作者
hehui000 发表于 2014-3-27 09:53
我也碰到过这个问题,应该是AF设置时, GPIO_PinAFConfig(SIGNAL_CAPTURE_PORT,SIGNAL_CAPTURE_PIN,GPIO_AF ...

牛呀,果然是这个原因,不同函数调用的引脚定义还有这个区别,:L

使用特权

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

本版积分规则

2

主题

9

帖子

0

粉丝