OpenEdv-开源电子网

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

【求助】关于stm32两个通用定时器的问题。。。。。

[复制链接]

9

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2016-8-16
在线时间
21 小时
发表于 2017-11-14 15:48:45 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 我是寻水鱼 于 2017-11-14 17:02 编辑

在做一个课题,用到tim3 tim4定时器中断,本意是先是定时器3打开,然后进入中断,当条件满足后,进入定时器4中断,然后在定时器4中断内,当另一条件满足后再次进入定时器3中断,这样循环,为啥3就是进不去4,4也进不去3,每个单独使用都没有问题。求解答。。

1.中断配置
[mw_shl_code=c,true]void NVIC_Configuration()
{
    NVIC_InitTypeDef NVIC_InitStructure;
   
                NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        
                NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;      
                NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;  
                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;      
                NVIC_Init(&NVIC_InitStructure);        
   
                NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQn;
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;   
                NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;      
                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;      
                NVIC_Init(&NVIC_InitStructure);        
         
}[/mw_shl_code]
2. 定时器3, 4 配置

[mw_shl_code=c,true]void time_init()
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;         //



        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

        TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//
        
        TIM_TimeBaseInitStructure.TIM_Period = 2000;//
        TIM_TimeBaseInitStructure.TIM_Prescaler = 35999;//
        TIM_TimeBaseInitStructure.TIM_ClockDivision = 0; //
        TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//
        TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);        
        TIM_Cmd(TIM3,ENABLE); //

        TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE );        //

}[/mw_shl_code]

[mw_shl_code=c,true]void time_init4()
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;         //éùÃ÷ò»¸ö½á11ìå±äá¿£¬óÃà′3õê¼»ˉGPIO


        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);

        TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
        
        TIM_TimeBaseInitStructure.TIM_Period = 2000;
        TIM_TimeBaseInitStructure.TIM_Prescaler = 35999;
        TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);        
        TIM_Cmd(TIM4,ENABLE);

        TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE );        //ê1Äü»òÕßê§ÄüÖ¸¶¨μÄTIMÖD¶Ï

}[/mw_shl_code]

3.定时器3中断函数
[mw_shl_code=c,true]void TIM3_IRQHandler()         //
{
        static u16 showw1,showw2;
        static u32 i1=0;
        static u8 a,b,c,d,e,f,g;
        static u8 temp1[20];
        TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
        i1++;
        if(i1%10==0)

                  showw2=a*100+b*10+c;
                  if(showw1>=showw2)//
                        {
                           TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
                                 TIM_Cmd(TIM3,DISABLE);//关闭定时器3
                           delay_ms(20);
                                 time_init4();;//定时器4初始化

                        }
        }
        else if(i1==1)
        {

            sprintf((char*)temp1,"%d",showw1);
                        display_GB2312_string(149,1,temp1);
        
        }
}[/mw_shl_code]

4.定时器4中断函数
[mw_shl_code=c,true]void TIM4_IRQHandler()         //
{
        static u32 showw1,showw2,showw3,aa,bb,cc;
        static u32 i1=0;
        static u8 a,b,c,d,e,f,g,p,q;
        static u8 temp1[20],temp2[20];
        TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
        
        showw1=i1++;

        showw2=a*100+b*10+c;
        showw3=p*10+q;
        if(showw3==2)        //
        {
                        if(showw1==(2*showw2))//
                        {
                           TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
                                 TIM_Cmd(TIM4,DISABLE);//关闭定时器4
                                 GPIO_SetBits(GPIOB,GPIO_Pin_11); //PB11à-¸ß
                                 delayms(1000);
         delay_ms(20);
                                 clear_screen();//½øèë×Ô¶ˉ1yÂ˽çÃæ
                                 zidongmoshixianshi11();
                                 TIM_Cmd(TIM3,ENABLE);//打开定时器3
                                 zidongmoshiyunxing1();
                        }
                        else if(showw1>=showw2&&showw1<(2*showw2))/
                        {
                                 aa=showw1-showw2;
                                 sprintf((char*)temp2,"%2d",aa);
               display_GB2312_string(149,1,temp2);
                                 display_GB2312_string(144,7,"2");//
                                 GPIO_SetBits(GPIOB,GPIO_Pin_10);
                                 GPIO_ResetBits(GPIOB,GPIO_Pin_11);
                        }
                        else if(showw1>=0&&showw1<showw2)//
                        {
                                 
                                 sprintf((char*)temp1,"%2d",showw1);
               display_GB2312_string(149,1,temp1);  
                                 display_GB2312_string(144,7,"1");//
                                 GPIO_ResetBits(GPIOB,GPIO_Pin_10);   /
                        }
                        
  }[/mw_shl_code]



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

使用道具 举报

9

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2016-8-16
在线时间
21 小时
 楼主| 发表于 2017-11-14 15:50:53 | 显示全部楼层
在主函数中,有一个函数先是定时器3初始化,进入定时器3中断函数
回复

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
发表于 2017-11-14 16:31:10 | 显示全部楼层
你不觉得你的中断优先级是一样的么
回复

使用道具 举报

9

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2016-8-16
在线时间
21 小时
 楼主| 发表于 2017-11-14 17:01:50 | 显示全部楼层
huyang201306 发表于 2017-11-14 16:31
你不觉得你的中断优先级是一样的么

抢占优先级相同,副优先级不同,我贴代码的时候落下了个
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 10:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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