OpenEdv-开源电子网

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

输入捕获测周期和脉宽

[复制链接]

13

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2013-11-8
在线时间
5 小时
发表于 2014-9-14 10:00:16 | 显示全部楼层 |阅读模式
5金钱


请问一下这个中断函数测周期和脉宽的时候不太对啊




void TIM5_IRQHandler(void)
{

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


主函数

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "lcd.h"


extern u8  TIM5CH1_CAPTURE_STA;  //输入捕获状态          
extern u16 TIM5CH1_CAPTURE_VAL; //输入捕获值

extern u32 count1;
extern u32 count2;
u32 temp1;
u32 temp2;
u32 fre;
u16 cyc;
u16 dian;
extern u16 xianshi;

 
 int main(void)
 {  
  delay_init();       //延时函数初始化  
  NVIC_Configuration();   //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  delay_init();       //延时函数初始化  
  uart_init(9600);   //串口初始化为9600
   LED_Init();        //LED端口初始化
  LCD_Init();
  KEY_Init();
  LCD_Clear(BLACK);
 
 // TIM3_PWM_Init(899,0);   //不分频。PWM频率=72000/(899+1)=80Khz
  TIM5_Cap_Init(0XFFFF,72-1); //以1Mhz的频率计数
    while(1)
 {
   delay_ms(10);
 // TIM_SetCompare2(TIM3,TIM_GetCapture2(TIM3)+1);

 // if(TIM_GetCapture2(TIM3)==300)TIM_SetCompare2(TIM3,0); 
     
   if(TIM5CH1_CAPTURE_STA&0X40)//成功捕获到了一次上升沿
  {
   temp1=count1&0X3F;
   temp1*=65536;//溢出时间总和
   temp1+=count1;//得到总的高电平时间
   temp2=count2&0X3F;
   temp2*=65536;//溢出时间总和
   temp2+=count2;//得到总的时间
  // printf("HIGH:%d us\r\n",temp);//打印总的高点平时间
   fre=1000000/temp2;
   cyc=(1000*temp1)/temp2;
   dian=cyc%10;
   cyc=cyc/10;   
  }
    OINT_COLOR=WHITE;
  
  
    LCD_ShowString(50,0,200,16,16,"Square wave Checking",BLACK);
  
  
    LCD_ShowString(0,32,200,16,16,"The cycle is:",BLACK);
    LCD_ShowString(0,48,200,16,16,"The period is:",BLACK);
    LCD_ShowString(0,64,200,16,16,"The fre is:",BLACK);
    LCD_ShowString(0,80,200,16,16,"The Pul wid is:",BLACK);
  
  
    LCD_ShowxNum(150,80,temp1,9,16,0,BLACK);
    LCD_ShowString(224,80,200,16,16,"us",BLACK);
  
  
    LCD_ShowxNum(150,48,temp2,9,16,0,BLACK);
    LCD_ShowString(224,48,200,16,16,"us",BLACK);
  
  
    LCD_ShowxNum(150,32,cyc,8,16,0,BLACK);
    LCD_ShowString(232,32,200,16,16,"%",BLACK);
    LCD_ShowxNum(224,32,dian,1,16,0,BLACK);
    LCD_ShowString(216,32,200,16,16,".",BLACK);
  
  
    LCD_ShowxNum(150,64,fre,9,16,0,BLACK);
    LCD_ShowString(224,64,200,16,16,"hz",BLACK);


    TIM5CH1_CAPTURE_STA=0;//开启下一次捕获 
 }
 }

 

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-9-15 01:03:40 | 显示全部楼层
仿真找下问题,要学会自己分析 问题在哪里。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-5 19:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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