OpenEdv-开源电子网

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

求助大神!TIM1附初值为0XFFFF-1进不了中断,也读不了值是为什么

[复制链接]

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2016-5-31
在线时间
30 小时
发表于 2016-7-16 20:26:32 | 显示全部楼层 |阅读模式
2金钱
本帖最后由 晨曦晓晓 于 2016-7-16 20:29 编辑

GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;


void TIM1_GPIO_TConfig(void)
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_12;   
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        GPIO_ResetBits(GPIOA,GPIO_Pin_12);       
}


void TIMx_NVIC_TConfig(void)
{
  NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;  
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);  
       
        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);         
       
       
}
void TIMx_TConfig(void)
{
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);       
       
        TIM_DeInit(TIM1);
        TIM_TimeBaseStructure.TIM_Period = 1;
        TIM_TimeBaseStructure.TIM_Prescaler =0;          
        TIM_TimeBaseStructure.TIM_ClockDivision =0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
       
        TIM_ITRxExternalClockConfig(TIM1,TIM_TS_ETRF);       
        TIM_ETRClockMode2Config(TIM1,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted, 0);  ±Öó′¥·¢Ä£ê

        TIM_ClearITPendingBit(TIM1, TIM_IT_Update  );
        TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);
        TIM_SetCounter(TIM1,0);
        TIM_Cmd(TIM1,ENABLE);        
       
        TIM_DeInit(TIM3);
        TIM_TimeBaseStructure.TIM_Period =0xFFFF-1;
        TIM_TimeBaseStructure.TIM_Prescaler =0;        
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
}


void MODE_select(void)
{
        if(modeSlect==MODE_T)
        {
                TIM_DeInit(TIM1);
                TIM_TimeBaseStructure.TIM_Period = 1;
                TIM_TimeBaseStructure.TIM_Prescaler =0;        
                TIM_TimeBaseStructure.TIM_ClockDivision = 0;
                TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
                TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
       
                TIM_ITRxExternalClockConfig(TIM1,TIM_TS_ETRF);       
                TIM_ETRClockMode2Config(TIM1,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted, 0);
                //TIM_SelectInputTrigger(TIM1, TIM_TS_ETRF);
                TIM_ClearITPendingBit(TIM1, TIM_IT_Update  );
                TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);//ÔêDí¸üDÂÖD¶Ï ,ÔêDíCC1IE2¶»ñÖD¶Ï       
                TIM_SetCounter(TIM1,0);
                TIM_Cmd(TIM1,ENABLE);        
                       
                TIM_DeInit(TIM3);
                TIM_TimeBaseStructure.TIM_Period =0xFFFF-1;
                TIM_TimeBaseStructure.TIM_Prescaler =0;        
                TIM_TimeBaseStructure.TIM_ClockDivision = 0;
                TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
                TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
        }
        else if(modeSlect==MODE_D)
        {
                TIM_DeInit(TIM1);
                TIM_TimeBaseStructure.TIM_Period=0xFFFF-1;
                TIM_TimeBaseStructure.TIM_Prescaler =0;        
                TIM_TimeBaseStructure.TIM_ClockDivision = 0;
                TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
                TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
       
                TIM_ITRxExternalClockConfig(TIM1,TIM_TS_ETRF);       
                TIM_ETRClockMode2Config(TIM1,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted, 0);
                //TIM_SelectInputTrigger(TIM1, TIM_TS_ETRF);
                TIM_ClearITPendingBit(TIM1, TIM_IT_Update  );
                TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);       
                TIM_SetCounter(TIM1,0);
                TIM_Cmd(TIM1,ENABLE);        
               
    TIM_DeInit(TIM3);
                TIM_TimeBaseStructure.TIM_Period =2000;
                TIM_TimeBaseStructure.TIM_Prescaler =36000-1;
                TIM_TimeBaseStructure.TIM_ClockDivision = 0;
                TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
                TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
               
        }
}






void TIM1_UP_IRQHandler(void)
{
        if(TIM_GetITStatus(TIM1, TIM_IT_Update) == SET)
        {
         
          TIM_ClearITPendingBit(TIM1,TIM_IT_Update);
                if(MODE_T==modeSlect)
                {
                       
                        TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );
                        TIM_Cmd(TIM3, ENABLE);
                        if(Index==1)
                        {
                               
                                time_1=flowCount*65535+TIM_GetCounter(TIM3);
                        }
                        if(Index==2)
                        {
                               
                                time_2=flowCount*65535+TIM_GetCounter(TIM3);
                               
                                TIM_SetCounter(TIM3,0);
                                Index=0;
                                flowCount=0;
                               
                                freq=(2*72000000.0/(time_2-time_1));
                                flag=1;   
                        }
                        Index++;       
                }
         if(MODE_D==modeSlect)
                {
                       
                       
                    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );
                    TIM_Cmd(TIM3, ENABLE);
                    Index_1++;
                       
                }
        }
}


void TIM3_IRQHandler(void)
{
        if(TIM_GetITStatus(TIM3, TIM_IT_Update) == SET)
        {
               
          TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
                if(MODE_T==modeSlect)
                {
                        flowCount++;   
                }
                if(MODE_D==modeSlect)
                {
                       
                        nCount=(u32)TIM_GetCounter(TIM1);
                       
                        TIM_SetCounter(TIM1,0);
                       
                        TIM_ITConfig(TIM1,TIM_IT_Update,DISABLE);
                       
                        freq=65535*Index_1+nCount;
                        Index_1=0;      
                        flag=1;         
                }
        }
}

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

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-7-17 10:12:30 | 显示全部楼层
直接调试看TIM1的寄存器啊,
回复

使用道具 举报

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2016-5-31
在线时间
30 小时
 楼主| 发表于 2016-7-25 19:52:06 | 显示全部楼层
憨厚诚实大叔 发表于 2016-7-17 10:12
直接调试看TIM1的寄存器啊,

还是不行,不懂定时器TIM1设置有没有错
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-11 02:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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