OpenEdv-开源电子网

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

求助,为什么使用定时器2输入比较的定时功能是总是连续进入中断

[复制链接]

2

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2013-10-16
在线时间
0 小时
发表于 2013-10-16 21:31:12 | 显示全部楼层 |阅读模式
要实现的功能:使用定时器的TIM_OCMode_Timing模式,用作定时功能,例如20ms的定时,20ms时间到后进入中断。每一次启动定时器后才进入中断

异常现象:启动定时器后连续进入中断

代码:


void TIM2_Start(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);

    TIM_TimeBaseStructure.TIM_Period=0xffff;              

    TIM_TimeBaseStructure.TIM_Prescaler= (72 - 1);                    /* 时钟预分频数 72M/72 */
    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;         /* 采样分频 */
    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /* 向上计数模式 */
    TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

      TIM2_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing ;                //TIM3_CCMR1[14:12]=011  翻转 当TIM3_CCR2=TIM3_CNT时,翻转OC2REF的电平
      TIM2_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;    //输入/捕获2输出允许  OC2信号输出到对应的输出引脚PB5
      TIM2_OCInitStructure.TIM_Pulse =60000;                            //若CC1通道配置为输出:CCR2是装入当前捕获/比较2 TIM3_CCR2寄存器的值(预装载值)。
                                                                          //当前捕获/比较寄存器包含了与计数器TIM3_CNT比较的值,并且在OC端口上输出信号
      TIM2_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;            //输出极性  低电平有效 TIM3_CCER[5]=1;
    
      TIM_OC2Init(TIM2, &TIM2_OCInitStructure);
      TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Disable);                //TIM3_CCMR1[1]=0  禁止TIM3_CCR2寄存器的预装载功能,可随时写入TIM3_CCR2
                                                                        //且新值马上起作用
    
       TIM_Cmd(TIM2,ENABLE);                                            //启动定时器3 TIM3_CR1[0]=1;  
       TIM_ITConfig(TIM2,TIM_IT_CC2,ENABLE);                            //TIM3_DIER[2]=1  允许捕获/比较2中断
   
}


void TIM2_IRQHandler(void)
{
 if (TIM_GetITStatus(TIM2, TIM_IT_CC2) != RESET)        //判断状态寄存器 TIM2_SR[2] 是否发生了捕获/比较2 中断
  {
    TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);            //软件清除状态寄存器 TIM2_SR[2] 捕获/比较2 中断中断标志
         GPIO_ResetBits(GPIOD, GPIO_Pin_2);

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-16 22:52:10 | 显示全部楼层
定时器第一次配置后,会无条件进入中断一次的,直接忽略这次中断。
另外,你这个到底是做个定时器用?还是做输入捕获用?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2013-10-16
在线时间
0 小时
 楼主| 发表于 2013-10-16 22:56:17 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
只要能够实现  每开启一次定时器进入中断一次即可,并且定时时间在开启定时器是可以改变
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2013-10-16
在线时间
0 小时
 楼主| 发表于 2013-10-16 22:59:40 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
请问原子哥 为什么使用TIM_OCMode_Timing模式会连续进入中断啊
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2013-10-16
在线时间
0 小时
 楼主| 发表于 2013-10-16 23:00:24 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
当定时器用
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-17 11:33:58 | 显示全部楼层
定时器我们不是有例程么?
看看我们的例程先。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2013-10-16
在线时间
0 小时
 楼主| 发表于 2013-10-17 18:48:35 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
我想实现的是任意时间定时器功能,并且可以随时修改定时时间,启动后仅进入中断一次
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-11 03:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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