OpenEdv-开源电子网

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

定时器外部 计数模式中可以有中断服务函数吗???

[复制链接]

9

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-5-9
在线时间
9 小时
发表于 2016-7-28 20:41:46 | 显示全部楼层 |阅读模式
10金钱
我用定时器外部计数模式进行对脉冲的计数,同时又想在当计数满溢出的时候触发更新中断,在中断服务函数中用一个变量记录它溢出了多少次。自己配置了定时器,但是不进入中断,弄了半天也不知道怎么回事,猜测是不是外部计数模式本身就是输入信号脉冲触发中断计数,就不能再触发溢出更新中断了?请各位帮忙看看,感激[mw_shl_code=applescript,true]u16        TIM2CH1_CAPTURE_VAL;
TIM_ICInitTypeDef  TIM2_ICInitStructure;

void TIM2_Cap_Init(void)
{         
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;   
    NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);        //ê1ÄüTIM2ê±Öó
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //ê1ÄüGPIOAê±Öó
       
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;  //PA0 Çå3y֮ǰéèÖà 
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 êäèë  
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO¿úËù¶èÎa50MHz
        GPIO_Init(GPIOA, &GPIO_InitStructure);
//        GPIO_ResetBits(GPIOA,GPIO_Pin_0);                                                 //PA0 ÏÂà-

        //ÖD¶ÏóÅÏè¼¶NVICéèÖÃ
        NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;  //TIM3ÖD¶Ï
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //ÏèÕ¼óÅÏè¼¶0¼¶
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;  //′óóÅÏè¼¶2¼¶
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQí¨μà±»ê1Äü
        NVIC_Init(&NVIC_InitStructure);  //3õê¼»ˉNVIC¼Ä′æÆ÷
       
        //3õê¼»ˉ¶¨ê±Æ÷2 TIM2         
        TIM_TimeBaseStructure.TIM_Period = 0xFFFF; //é趨¼ÆêyÆ÷×Ô¶ˉ֨װÖμ
        TIM_TimeBaseStructure.TIM_Prescaler =0;         //Ô¤·ÖÆμÆ÷   
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //éèÖÃê±Öó·Ö¸î:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIMÏòéϼÆêyÄ£ê½
        TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //¸ù¾YTIM_TimeBaseInitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉTIMxμÄê±¼ä»ùêyμ¥λ
          TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
        TIM_SetCounter(TIM2, 0);        
        TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); //ê1ÄüÖ¸¶¨μÄTIM2ÖD¶Ï,ÔêDí¸üDÂÖD¶Ï       
           TIM_Cmd(TIM2,ENABLE );         //ê1Äü¶¨ê±Æ÷2

}

void TIM2_IRQHandler(void)   //TIM2ÖD¶Ï·tÎñoˉêy
{
   
        if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //¼ì2éÖ¸¶¨μÄTIMÖD¶Ï·¢éúóë·ñ:TIM ÖD¶ÏÔ′
                {
                TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );  //Çå3yTIMxμÄÖD¶Ï′y′|àíλ:TIM ÖD¶ÏÔ′
        TIM_SetCounter(TIM2, 0);
        num1++;               
                }
        LED0=!LED0;
        

}[/mw_shl_code]不尽。。。

定时器配置

定时器配置
2.png

最佳答案

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

定时器配置中清除一下中断标志,TIM_ClearFlag(TIM2,TIM_FLAG_Update);
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
407
金钱
407
注册时间
2016-3-27
在线时间
104 小时
发表于 2016-7-28 20:41:47 | 显示全部楼层
定时器配置中清除一下中断标志,TIM_ClearFlag(TIM2,TIM_FLAG_Update);
回复

使用道具 举报

9

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-5-9
在线时间
9 小时
 楼主| 发表于 2016-7-28 21:08:46 | 显示全部楼层
请各路大神指教,感激不尽,可追加悬赏
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-7-28 21:12:49 | 显示全部楼层
xiaolei 发表于 2016-7-28 21:08
请各路大神指教,感激不尽,可追加悬赏


首先,你得确定他开始计数了没。也就是CNT寄存器的数值有变没。最好自己产生一个自己知道的频率若干个波形,可以通过另外一个定时器的PWM重复计数模式产生给他。
最好得确定他计数无误先
回复

使用道具 举报

9

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-5-9
在线时间
9 小时
 楼主| 发表于 2016-7-28 21:38:34 | 显示全部楼层
憨厚诚实大叔 发表于 2016-7-28 21:12
首先,你得确定他开始计数了没。也就是CNT寄存器的数值有变没。最好自己产生一个自己知道的频率若干个 ...

有计数的,计的数我用串口打印出来了,但是我再里面加的更新中断没进入,不知道是因为不允许这个用还是配置错了
回复

使用道具 举报

15

主题

406

帖子

0

精华

高级会员

Rank: 4

积分
795
金钱
795
注册时间
2015-3-26
在线时间
151 小时
发表于 2016-7-29 08:31:59 | 显示全部楼层
你可以计数到一定数值触发中断,,,也可以寄单位时间内的脉冲个数 。都可以,我最近做了个10ms的单位时间脉冲计数,不过我用的HAL库
回复

使用道具 举报

5

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-11-26
在线时间
25 小时
发表于 2016-7-29 09:50:45 | 显示全部楼层
你开启一下  预装载缓冲器  还有就是初始化的时候清除一下TIM2的更新中断
回复

使用道具 举报

9

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-5-9
在线时间
9 小时
 楼主| 发表于 2016-7-29 10:37:56 | 显示全部楼层
我加上这句就好了  但有个疑问  定时器捕获脉冲不是只有高级定时器才有的功能吗  怎么我用的定时器2也行了。。。  
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 14:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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