OpenEdv-开源电子网

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

定时器中断仿真能进,烧录后进不去

[复制链接]

7

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2022-9-29
在线时间
27 小时
发表于 2023-4-13 22:15:45 | 显示全部楼层 |阅读模式
5金钱
这里是我定时器配置和定时器中断的代码,在仿真中可以做到按照设定好的挨个进中断,各个通道挨个输出波形,但烧录到板子上之后中断就进不去了,求助各位大佬,可能是什么问题哇。

void TIM3_IRQHandler(void)   //TIM3ÖD¶Ï
{
        static uint32_t i = 0;
        static uint16_t j = 0;
        static int index = 0;
        if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //¼ì2éÖ¸¶¨μÄTIMÖD¶Ï·¢éúóë·ñ:TIM ÖD¶ÏÔ′
        {
                TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  //Çå3yTIMxμÄÖD¶Ï′y′|àíλ:TIM ÖD¶ÏÔ′
                i++;
                if(i == (1600-1))
                {
                        i = 0;
                        j ++;
                }
                if(j == step[index])
                {
                        j = 0;
                        switch (index)
                        {
                                case 0:
                                        TIM_CCxCmd(TIM3,TIM_Channel_1 ,DISABLE);
                                        TIM_CCxCmd(TIM3,TIM_Channel_4 ,ENABLE);
                                        MOTOR1_STOP
                                        MOTOR_SWAP_RUN
                                        break;
                                case 1:
                                        MOTOR_SWAP_STOP
                                        TIM_CCxCmd(TIM3,TIM_Channel_4 ,DISABLE);
                                        MOTOR_WASH_DIR_DOWN
                                        MOTOR_WASH_RUN
                                        TIM_CCxCmd(TIM3,TIM_Channel_3 ,ENABLE);
                                        break;
                                case 2:
                                        TIM_CCxCmd(TIM3,TIM_Channel_3 ,DISABLE);
                                        WASH_ON
                                        MOTOR_WASH_STOP
                                        break;
                                case 3:
                                        WASH_OFF
                                        MOTOR_WASH_DIR_UP
                                        TIM_CCxCmd(TIM3,TIM_Channel_3 ,ENABLE);
                                        MOTOR_WASH_RUN
                                        break;
                                case 4:
                                        MOTOR_WASH_STOP
                                        TIM_CCxCmd(TIM3,TIM_Channel_3 ,DISABLE);
                                        MOTOR1_RUN
                                        TIM_CCxCmd(TIM3,TIM_Channel_1 ,ENABLE);
                                        break;
                                default :
                                        TIM_Cmd(TIM3, DISABLE);  //ê1ÄüTIM3
                        }
                                index ++;
                }
        }
}


void Motor_Swap_Nvic_Init(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //ê1ÄüÖ¸¶¨μÄTIM3ÖD¶Ï,ÔêDí¸üDÂÖD¶Ï
        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3ÖD¶Ï
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //ÏèÕ¼óÅÏ輶0¼¶
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //′óóÅÏ輶3¼¶
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQí¨μà±»ê1Äü
        NVIC_Init(&NVIC_InitStructure);  //¸ù¾YNVIC_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèNVIC¼Ä′æÆ÷

}

static void Timer_Init(uint32_t arr1)
{
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
        Motor_Swap_Nvic_Init();
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 |RCC_APB1Periph_TIM2, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
        TIM_TimeBaseStructure.TIM_Period = arr1; //éèÖÃÔúÏÂò»¸ö¸üDÂê¼t×°èë»î¶ˉμÄ×Ô¶ˉÖØ×°ÔؼÄ′æÆ÷ÖüÆúμÄÖμ
        TIM_TimeBaseStructure.TIM_Prescaler =7; //éèÖÃóÃà′×÷ÎaTIMxê±ÖóÆμÂê3yêyμÄÔ¤·ÖÆμÖμ
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //éèÖÃê±Öó·Ö¸î:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIMÏòéϼÆêyÄ£ê½
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //¸ù¾YTIM_TimeBaseInitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉTIMxμÄê±¼ä»ùêyμ¥λ
       
       
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //Ñ¡Ôñ¶¨ê±Æ÷Ä£ê½:TIMÂö3å¿í¶èμ÷ÖÆÄ£ê½2
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //±è½Ïêä3öê1Äü
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //êä3ö¼«DÔ:TIMêä3ö±è½Ï¼«DÔ¸ß
        TIM_OC1Init(TIM3, &TIM_OCInitStructure);  //¸ù¾YTÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèTIM3 OC2
        TIM_OC2Init(TIM3, &TIM_OCInitStructure);
        TIM_OC3Init(TIM3, &TIM_OCInitStructure);
        TIM_OC4Init(TIM3,        &TIM_OCInitStructure);
        TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);  //ê1ÄüTIM3ÔúCCR2éÏμÄԤװÔؼÄ′æÆ÷
        TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //ê1ÄüTIM3ÔúCCR2éÏμÄԤװÔؼÄ′æÆ÷
        TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
        TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);

       
        TIM_SetCompare1(TIM3,1000);  
        TIM_SetCompare2(TIM3,1000);
        TIM_SetCompare3(TIM3,1000);
        TIM_SetCompare4(TIM3,1000);
        TIM_CCxCmd(TIM3,TIM_Channel_2 ,DISABLE);
        TIM_CCxCmd(TIM3,TIM_Channel_3 ,DISABLE);
        TIM_CCxCmd(TIM3,TIM_Channel_4 ,DISABLE);

        TIM_Cmd(TIM3, ENABLE);  //ê1ÄüTIM3

}


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

使用道具 举报

0

主题

465

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1732
金钱
1732
注册时间
2021-4-11
在线时间
320 小时
发表于 2023-4-14 09:10:04 | 显示全部楼层
回复

使用道具 举报

70

主题

6698

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12692
金钱
12692
注册时间
2012-11-26
在线时间
3711 小时
发表于 2023-4-14 09:57:11 | 显示全部楼层
可能程序已经挂了  
学无止境
回复

使用道具 举报

11

主题

2103

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4588
金钱
4588
注册时间
2015-1-10
在线时间
574 小时
发表于 2023-4-14 10:08:49 | 显示全部楼层
嵌入式逻辑控制搞软件仿真没啥意义,直接上板子跑才行,软件仿真搞搞算法模拟还凑合
回复

使用道具 举报

7

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2022-9-29
在线时间
27 小时
 楼主| 发表于 2023-4-14 15:39:35 | 显示全部楼层
阿侑kevin 发表于 2023-4-14 10:08
嵌入式逻辑控制搞软件仿真没啥意义,直接上板子跑才行,软件仿真搞搞算法模拟还凑合

上板子后没法查看那么多引脚的引脚的信号状态哇。上板子后程序进不去中断,所以想让大家看看是不是程序哪里出问题了
回复

使用道具 举报

7

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2022-9-29
在线时间
27 小时
 楼主| 发表于 2023-4-14 15:40:40 | 显示全部楼层
jermy_z 发表于 2023-4-14 09:57
可能程序已经挂了

我创了个新项目然后把程序复制进去就能用了,编译器抽风了还是玄学了?
回复

使用道具 举报

11

主题

2103

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4588
金钱
4588
注册时间
2015-1-10
在线时间
574 小时
发表于 2023-4-14 15:47:37 | 显示全部楼层
tyty697 发表于 2023-4-14 15:39
上板子后没法查看那么多引脚的引脚的信号状态哇。上板子后程序进不去中断,所以想让大家看看是不是程序哪 ...

上板子上示波器,这点配置还是要有的吧
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 11:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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