OpenEdv-开源电子网

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

通用定时器输入捕获上升沿有限次数测频率捕获值不对?

[复制链接]

2

主题

4

帖子

0

精华

新手入门

积分
32
金钱
32
注册时间
2015-9-20
在线时间
0 小时
发表于 2015-9-20 19:04:52 | 显示全部楼层 |阅读模式
5金钱
使用STM32F103ZET6定时器5通道1来输入捕获测量方波频率。但只测前四个上升沿然后关闭输入捕获功能。然后用第2个上升沿的捕获值减去第1个上升沿的捕获值,第3个上升沿的捕获值前去第2个上升沿的捕获值,第4个上升沿的捕获值减去第3个上升沿的捕获值(既测连续上升沿的捕获值然后相减从而测得频率)但是第1、2次的捕获值正确(测的频率也正确)但第3、4次测的捕获值不对,出现胡乱数据。不知什么原因?哪位大神可以帮小弟解决一下!

void TIM5_IRQHandler(void)
{  
     if(TIM_GetITStatus(TIM5, TIM_IT_CC1) == SET)//上升沿到来发生捕获事件
   {
   TIM_ClearITPendingBit(TIM5, TIM_IT_CC1);//清除中断标志位
 if(capture_number_1== 0)
   {
     IC5ReadValue1 = TIM_GetCapture1(TIM5);//获取第一个上升沿的捕获值
 capture_number_1 = 1;
 
}

  else if(capture_number_1 == 1)
{
 IC5ReadValue2 = TIM_GetCapture1(TIM5); //获取第二个上升沿的捕获值
 capture_number_1 = 2;
 
}
  else if(capture_number_1 == 2)
{
 IC5ReadValue3 = TIM_GetCapture1(TIM5); //获取第三个上升沿的捕获值
 capture_number_1 = 3;
}
  else if(capture_number_1 == 3)
{
 IC5ReadValue4 = TIM_GetCapture1(TIM5); //获取第四个上升沿的捕获值
 TIM_Cmd(TIM5, DISABLE);
}

 switch(1)
   {
  case 1: {
            if(IC5ReadValue2 >IC5ReadValue1 )
              {
               Capture = (IC5ReadValue2 - IC5ReadValue1); //未溢出第二个捕获值减去第一个捕获值得到两次计数差值
              }
            else
              {
             Capture = ((0xFFFF -IC5ReadValue1 ) + IC5ReadValue2); //溢出定时器重装,需要将差值做补偿运算
              }
 TIM5Freq1=1000000/Capture;
                 printf("Frequency1:%.2f HZ\r\n",TIM5Freq1);
}

  case 2: {
             if(IC5ReadValue3 > IC5ReadValue2 )
               {
                Capture = (IC5ReadValue3 - IC5ReadValue2); //未溢出第二个捕获值减去第一个捕获值得到两次计数差值
               }
             else
               {
              Capture = ((0xFFFF - IC5ReadValue2) + IC5ReadValue3 ); //溢出定时器重装,需要将差值做补偿运算
               }
  TIM5Freq2=1000000/Capture;
                  printf("Frequency2:%.2f HZ\r\n",TIM5Freq2);
}

  case 3: {
              if(IC5ReadValue4 > IC5ReadValue3)
                {
                 Capture = (IC5ReadValue4 - IC5ReadValue3); //未溢出第二个捕获值减去第一个捕获值得到两次计数差值
                }
              else
                {
               Capture = ((0xFFFF -IC5ReadValue3 ) +IC5ReadValue4 ); //溢出定时器重装,需要将差值做补偿运算
                }
  TIM5Freq3=1000000/Capture;
                  printf("Frequency3:%.2f HZ\r\n", TIM5Freq3);
                 }
}
 
}  
}  

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-9-20 22:37:27 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手入门

积分
32
金钱
32
注册时间
2015-9-20
在线时间
0 小时
 楼主| 发表于 2015-9-21 08:23:38 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥到底怎么回事啊?捕捉值发生变化吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-9-21 22:59:55 | 显示全部楼层
回复【3楼】dianguangdulong:
---------------------------------
仿真调试
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-19 11:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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