打印
[STM32]

高分求救,stm32 mo timer2进不了中断

[复制链接]
2252|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
大道至简|  楼主 | 2014-4-29 11:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
写了一个stm32的定时器初始化程序
cpu型号是stm32f051c8t6

可以初始化,但是永远进不了中断服务程序,程序在仿真器里面跑的时候每次停下来,都停止在以下红色的部分。
难道我中断部分配置错了?


以下是代码
//-----------------------------------------------------        
void TIM2_IRQHandler()
{
        static int tic,tid;
         if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) ==SET )
         {
                TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);
                        tic++;
                        tid=tic&0x0001;
                        if(tid==0)
                                GPIO_SetBits(LED_PORT,LED4);  //点亮LED1
                        else
                                GPIO_ResetBits(LED_PORT,LED4);//熄灭LED1
        }
}
//-----------------------------------------------------       
void init_timer2_sub0()
{
    GPIO_InitTypeDef GPIO_InitStructure;   
    RCC_AHBPeriphClockCmd(MOTO_GPIO_CLK, ENABLE);//使能moto所在GPIO的时钟

        GPIO_InitStructure.GPIO_Pin = motor0_pluse | motor0_dir;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(motor0_port, &GPIO_InitStructure);

        GPIO_ResetBits(motor0_port,motor0_pluse | motor0_dir);
}
//-----------------------------------------------------       
void init_timer2_sub1()
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        TIM_DeInit(TIM2);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

        TIM_InternalClockConfig(TIM2);
        TIM_TimeBaseStructure.TIM_Period=2000;//这个值实际上就是TIMX->ARR,延时开始时重新设定即可?
        TIM_TimeBaseStructure.TIM_Prescaler=20000;//计数频率为1KHz
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV4;//定时器基准频率8MHz
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数
        TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
        TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
        TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//计数溢出时触发中断
        TIM_ARRPreloadConfig(TIM2, DISABLE);
        TIM_Cmd(TIM2,ENABLE);
}
//-----------------------------------------------------
void init_timer2_sub2()
{
        NVIC_InitTypeDef  NVIC_InitStructure;
        NVIC_InitStructure.NVIC_IRQChannel =TIM2_IRQn;  
        NVIC_InitStructure.NVIC_IRQChannelPriority = 3;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);       
}
///-----------------------------------------------------
void moto_task_init()
{
        init_MotorStepCount();
        init_timer2_sub0();
        init_timer2_sub1();
        init_timer2_sub2();
}
//-----------------------------------------------------       
void moto_task(void)
{
        moto_task_init();
        while(1)
        {
        }
}


相关帖子

沙发
大道至简|  楼主 | 2014-4-29 11:43 | 只看该作者
最后都停止在这个红色的部分:
void moto_task(void)
{
        moto_task_init();
        while(1)
        {
        }

}

使用特权

评论回复
板凳
大道至简|  楼主 | 2014-4-29 11:50 | 只看该作者
断点停下来的时候可以看见timer2的CNT寄存器变化了

使用特权

评论回复
地板
lanmp| | 2014-4-29 11:51 | 只看该作者
版主都搞不定,看来这芯片有问题。

使用特权

评论回复
5
大道至简|  楼主 | 2014-4-29 14:31 | 只看该作者
不是搞不定,只是时间问题。有配件类似问题,也许回答我只是一分钟的事情。

使用特权

评论回复
6
大道至简|  楼主 | 2014-4-29 22:08 | 只看该作者
自己找到了,问题在这里。disable更改成enable就好了
void init_timer2_sub1()
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        TIM_DeInit(TIM2);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

        TIM_InternalClockConfig(TIM2);
        TIM_TimeBaseStructure.TIM_Period=2000;//这个值实际上就是TIMX->ARR,延时开始时重新设定即可?
        TIM_TimeBaseStructure.TIM_Prescaler=20000;//计数频率为1KHz
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV4;//定时器基准频率8MHz
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数
        TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
        TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
        TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//计数溢出时触发中断
        TIM_ARRPreloadConfig(TIM2, DISABLE);
        TIM_Cmd(TIM2,ENABLE);
}

使用特权

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

本版积分规则

个人签名:看大道至简所著的《感悟设计》,感悟设计的至简大道

7556

主题

9507

帖子

18

粉丝