OpenEdv-开源电子网

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

原子个还是那个捕获的问题,我用定时计数器定时产生低脉冲,但是只能捕获第1,3,5 ,个脉冲

[复制链接]

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
发表于 2015-8-23 10:26:49 | 显示全部楼层 |阅读模式
5金钱

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "io.h"
//ALIENTEK战舰STM32开发板实验10
//输入捕获实验 
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司
u8 num = 0  ;
u8 Label_variable_3 ;
u8 g_rise ;
u8 g_fall;
u8 count ;
u8 count3;
u8  TIM2CH1_CAPTURE_STA=0; //输入捕获状态          
u16 TIM2CH1_CAPTURE_VAL; //输入捕获值
 int main(void)
 {  
  u32 temp=0;
 io_init() ;
 delay_init();       //延时函数初始化  
 NVIC_Configuration();   //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
 uart_init(9600);  //串口初始化为9600
  LED_Init();        //LED端口初始化
    timer_3_init(59999,7199); //6秒
  TIM2_Cap_Init(0XFFFF,72-1); //以1Mhz的频率计数
    while(1)
 {   
   if(TIM2CH1_CAPTURE_STA&0X80)//成功捕获到了一次上升沿
  {
      num++;
   temp=TIM2CH1_CAPTURE_STA&0X3F;
   temp*=65536;//溢出时间总和
   temp+=TIM2CH1_CAPTURE_VAL;//得到总的高电平时间
   printf("HIGH:%d us\r\n",temp);//打印总的高点平时间
   TIM2CH1_CAPTURE_STA=0;//开启下一次捕获
  }
 }
 }

 
//定时器2中断服务程序 
void TIM2_IRQHandler(void)
{

  if((TIM2CH1_CAPTURE_STA&0X80)==0)//还未成功捕获 
 {  
  if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
  
  {    
   if(TIM2CH1_CAPTURE_STA&0X40)//已经捕获到高电平了
   {
    if((TIM2CH1_CAPTURE_STA&0X3F)==0X3F)//高电平太长了
    {
     TIM2CH1_CAPTURE_STA=0X80;//标记成功捕获了一次
     TIM2CH1_CAPTURE_VAL=0XFFFF;
    }else count++;
   } 
  }
 if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)//捕获1发生捕获事件
  { 
   if(TIM2CH1_CAPTURE_STA==0X40)  //捕获到一个下降沿   
   { 
       g_fall++;     
    TIM2CH1_CAPTURE_STA = 0X80;  //标记成功捕获到一次上升沿
    TIM2CH1_CAPTURE_VAL=TIM_GetCapture1(TIM2);
       TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Rising); //CC1P=0 设置为上升沿捕获
   }else          //还未开始第一次捕获上升沿
   {
       g_rise++;
    TIM2CH1_CAPTURE_STA=0;   //清空
    TIM2CH1_CAPTURE_VAL=0;
     TIM_SetCounter(TIM2,0);
    TIM2CH1_CAPTURE_STA =0X40;  //标记捕获到了上升沿
       TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Falling );  //CC1P=1 设置为下降沿捕获
   }
    
   
   
   
        
  }                    
  }
 
    TIM_ClearITPendingBit(TIM2, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位
}

 /********************************************************************/
/*         定时计数器3中断-产生一定时间间隔的方波信号               */
/*                                                                  */
/****************************************************************** */
void TIM3_IRQHandler(void)//TIM3中断函数
{
  
 if (TIM_GetITStatus(TIM3, TIM_IT_Update)!= RESET) //检查中断3是否发生
 {
  TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除中断3的中断标志
  count3++   ;
  if(count3==2)
   {
      count3 = 0;
   GPIO_ResetBits(GPIOB,GPIO_Pin_5);
   GPIO_ResetBits(GPIOB,GPIO_Pin_6);
      TIM_Cmd(TIM2,DISABLE );  //使能定时器2进行输入捕获,捕捉轨道状态
   delay_ms(1800);
   

       TIM_Cmd(TIM2,ENABLE );  //使能定时器2进行输入捕获,捕捉轨道状态   
       GPIO_SetBits(GPIOB,GPIO_Pin_5);
        GPIO_SetBits(GPIOB,GPIO_Pin_6); 
   }
  
 }
}

单纯光记录上升沿是正确的

最佳答案

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

回复【21楼】wszdxmh: --------------------------------- 刚才看了波形确实是定时计数器产生的波形不稳
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-23 10:26:50 | 显示全部楼层
回复【21楼】wszdxmh:
---------------------------------
刚才看了波形确实是定时计数器产生的波形不稳
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-23 10:32:30 | 显示全部楼层
求求大家给我提供一个思路,现在真想不出为什么么么么,
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-23 11:15:40 | 显示全部楼层
这个问题怎么了,怎么没人回答,是太LOW 了么  ,愁死了我
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
发表于 2015-8-23 11:23:07 | 显示全部楼层
题目那么长,看了半分钟没看出来你想要干什么
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-23 11:25:11 | 显示全部楼层
回复【4楼】wszdxmh:
---------------------------------
这样你还在么我给你说
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-23 11:27:13 | 显示全部楼层
回复【4楼】wszdxmh:
---------------------------------
就是输入捕获(先上升沿后下降沿)   采集PB5由定时计数器产生的一分钟高电平
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
发表于 2015-8-23 11:27:36 | 显示全部楼层
回复【5楼】神祗:
---------------------------------
你想要找到问题的答案,首先要问对问题,我不在你就不说了?你不是想解决问题的吧。
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-23 11:31:46 | 显示全部楼层
回复【4楼】wszdxmh:
---------------------------------
他总是隔着一个高电平脉冲再采,通过程序里的g_rise 和g_fall这两个变量看出来的  一分钟后先g_rise 加1,在一分种g_fall加1,但是到了第二个脉冲就不加了,要等1分种到了第三个脉冲才开始累加
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
发表于 2015-8-23 11:34:18 | 显示全部楼层
回复【8楼】神祗:
---------------------------------
这是你要实现的效果,还是你遇到的问题啊?是我理解能力太差了吗。。。。。。。
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-23 11:35:02 | 显示全部楼层
回复【7楼】wszdxmh:
---------------------------------
不是 我是想和你讨论谈论什么原因 所以才问你还在么
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-23 11:36:27 | 显示全部楼层
回复【9楼】wszdxmh:
---------------------------------
我要是连续采样不是隔一个  一采集
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
发表于 2015-8-23 22:30:12 | 显示全部楼层
目测是中断优先级设置的问题,脉冲捕抓原子哥有例程的。
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-24 06:07:32 | 显示全部楼层
回复【12楼】wszdxmh:
--------------------------------是中断优先级的事,我把捕获的优先级设的比定时计数高,当执行定时计数器的下降沿语句的时候,会进入捕获中断,但是程序执行完下降沿中断程序后,回不到定时计数器中断中继续执行了,定时计数器还有上升沿语句呢 ,该怎么办
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
发表于 2015-8-24 13:27:58 | 显示全部楼层
你可以采用定时器输出PWM的方法,原子哥也有例程了,就不用用定时器手动生成方波了,优先级的问题要自己调一下才知道,我没做过也不知道怎么哪一个要高,哪一个要低。
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-24 16:14:15 | 显示全部楼层
回复【14楼】wszdxmh:
---------------------------------
定时器产生方波是项目需要,又发现个问题我的定时计数器产生6秒的高脉冲,为什么仿真算出的是7或8或9或10,差距也太大了吧,还真么不稳定,不知道你以前搞过么
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
发表于 2015-8-24 16:20:49 | 显示全部楼层
回复【15楼】神祗:
---------------------------------
仿真器要是能代替示波器,示波器早就卖不出去了。
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-24 16:53:44 | 显示全部楼层
回复【16楼】wszdxmh:
---------------------------------你的意思是说仿真器不是那么可信么
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-24 16:54:35 | 显示全部楼层
回复【16楼】wszdxmh:
---------------------------------
我有时候还仿真出来捕获时间是4秒 ,12秒 ,真是无语了
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
发表于 2015-8-24 17:02:05 | 显示全部楼层
回复【18楼】神祗:
---------------------------------
有时候,这种概率事件你怎么知道是仿真器捕抓的问题还是你程序问题?用示波器排除一种可能性先,而且示波器确实也要比仿真器精确,当然也要看你示波器的好坏了。
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-24 18:40:21 | 显示全部楼层
回复【19楼】wszdxmh:
---------------------------------
你的意思是说用示波器测一下定时计数器产生的方波,然再和程序捕获值对比一下么
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
发表于 2015-8-24 23:20:18 | 显示全部楼层
回复【20楼】神祗:
---------------------------------
对,你可以用示波器看看波形有没问题,到底是波形问题,还是捕获问题。
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-25 08:59:52 | 显示全部楼层
回复【21楼】wszdxmh:
---------------------------------
嗯如果波形没问题的话,但是捕获不稳定,这个不属于正常现象吧,我看程序执行的流程没有问题仿真的时候,到底这个时间浪费在哪里了,真无语了
回复

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2015-8-25 09:25:51 | 显示全部楼层
回复【21楼】wszdxmh:
---------------------------------
谢谢你给的提示
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-22 03:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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