OpenEdv-开源电子网

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

高级定时器TIM1输出SPWM 程序运行进入不了中断 哪里出了问题

[复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-9-6
在线时间
6 小时
发表于 2016-9-8 18:05:49 | 显示全部楼层 |阅读模式
4金钱
软件仿真一步步运行,在中断出设置断点,可是运行不到,小弟是初学者,求大神帮我看看
void Spwm_Init_Init(u16 arr,u16 psc)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        TIM_OCInitTypeDef TIM_OCInitStructure;
        TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA,ENABLE);
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
        RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1,ENABLE);
        
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
        
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
        
        TIM_TimeBaseStructure.TIM_Period=arr;//
        TIM_TimeBaseStructure.TIM_Prescaler=psc;//预分频系数
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_CenterAligned1;//中央对齐模式1
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
        TIM_TimeBaseStructure.TIM_RepetitionCounter=0x0000;
        TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
        
        TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Set;
        TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
        TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCIdleState_Reset;
        TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High;
        TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
        TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_Pulse=100;//CCR
        TIM_OC1Init(TIM1, &TIM_OCInitStructure);
        
        TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Disable);
        
        TIM_BDTRInitStructure.TIM_OSSRState=TIM_OSSRState_Enable;
        TIM_BDTRInitStructure.TIM_OSSIState=TIM_OSSIState_Enable;
        TIM_BDTRInitStructure.TIM_LOCKLevel=TIM_LOCKLevel_OFF;
        TIM_BDTRInitStructure.TIM_DeadTime=0x07;        //死区时间
        TIM_BDTRInitStructure.TIM_BreakPolarity=TIM_BreakPolarity_High;
        TIM_BDTRInitStructure.TIM_Break=TIM_Break_Disable;
        TIM_BDTRInitStructure.TIM_AutomaticOutput=TIM_AutomaticOutput_Enable;
        TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);
        TIM_ARRPreloadConfig(TIM1,ENABLE);         
        TIM_CtrlPWMOutputs(TIM1,ENABLE);
        TIM_Cmd(TIM1, ENABLE);
        
        TIM_ITConfig(TIM1,TIM_IT_CC1,ENABLE );
        NVIC_InitStructure.NVIC_IRQChannel=TIM1_CC_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        

}

void TIM1_CC_IRQHandler(void)
{
        if (TIM_GetITStatus(TIM1, TIM_IT_CC1) != RESET)
        {
                 TIM_ClearITPendingBit(TIM1, TIM_IT_CC1);
                 TIM_SetCompare1(TIM1,Duty[count]);
                i++;
                if(i==20)
                {
                        i=0;
                        count++;
                }
                if(count==num)
                {
                        count=0;
                }
        }

}

最佳答案

查看完整内容[请看2#楼]

改成TIM_Up_IRQn就好了,我之前也是这种问题
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2016-10-7
在线时间
5 小时
发表于 2016-9-8 18:05:50 | 显示全部楼层
改成TIM_Up_IRQn就好了,我之前也是这种问题
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-9-6
在线时间
6 小时
 楼主| 发表于 2016-9-9 12:55:07 | 显示全部楼层
帮忙顶下
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-8-26
在线时间
2 小时
发表于 2016-10-6 19:53:05 | 显示全部楼层
没啥问题,主函数要加这条语句NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-24 11:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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