找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1904|回复: 0
打印 上一主题 下一主题
收起左侧

STM32单片机输入捕获程序逻辑问题,迫切请求前辈指点

[复制链接]
跳转到指定楼层
楼主
初始化函数没有问题,定时器频率为1MHZ,编程思路是定义两个全局变量一个32位的TIM_CH1_CAPTURE_VAL一个8位的TIM_CH1_CAPTURE_STA,32位用来存放输入捕获值,8位的最高位用来表示捕获到高电平(1表示捕获)次高位表示脉冲是否捕获完成(捕获完成置1),低六位用来表示计数器溢出次数的,每溢出一次自加一,通过定义的i/o口结合按键手动输入高电平,本来是不会出现溢出情况的(32位定时器溢出需要4千多秒)但是按一下按键有的时候就会出现溢出的那种情况,实在是找不出来有什么逻辑问题了,求大神指教,本人虚心求教万望各位指点一二

STM32单片机主函数
int main()
{
long long time=0;
u8 a=0;
SysTick_Init(168);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  
LED_Init();
USART1_Init(9600);
Input_Init(0xffffffff,83);
while(1)
{
  a=TIM_CH1_CAPTURE_STA;
  a&=0x40;
  while(a==0x40)
  {
     a=TIM_CH1_CAPTURE_STA&0x80;
    if(a!=0x80)
    {
     a=TIM_CH1_CAPTURE_STA;
     a&=0x3f;
     time=TIM_CH1_CAPTURE_VAL+a*0xffffffff;  
     printf("¸ßµçƽ³ÖÐøʱ¼ä %lld us\n",time);
     time=0;
     TIM_CH1_CAPTURE_VAL=0;
     TIM_CH1_CAPTURE_STA=0;
    }
    else
    {
     if(a==0x80)
     {
      time=0x3f*0xffffffff;
      printf("%lld\n",time);
      TIM_CH1_CAPTURE_STA=0x80;
     }
    }
    a=0;
  }
  led1=!led1;
  delay_ms(200);
}
}
中断服务函数
void TIM5_IRQHandler(void)
{
if(TIM_GetITStatus(TIM5,TIM_IT_Update)==1)  
{
  if(TIM_CH1_CAPTURE_STA>=0x80)   
  {
   if(TIM_CH1_CAPTURE_STA==0x3f)  
   {
    TIM_CH1_CAPTURE_STA|=0x40;  
    TIM_Cmd(TIM5,DISABLE);
    TIM_SetCounter(TIM5,0);
    TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);
    TIM_Cmd(TIM5,ENABLE);
   }
   else
   {
    TIM_CH1_CAPTURE_STA++;   
   }
  }
  else
  {
   
  }
}
else  
{
  if(TIM_GetITStatus(TIM5,TIM_IT_CC1)==1)
  {
   if(TIM_CH1_CAPTURE_STA<0x80)
   {
    TIM_CH1_CAPTURE_STA=TIM_CH1_CAPTURE_STA|0x80;  
    TIM_Cmd(TIM5,DISABLE);
    TIM_SetCounter(TIM5,0);
    TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);
    TIM_Cmd(TIM5,ENABLE);
   }
   else      
   {
    TIM_CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5);
    TIM_CH1_CAPTURE_STA|=0x40;
    TIM_CH1_CAPTURE_STA&=0x7f;
    TIM_Cmd(TIM5,DISABLE);
    TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising);
    TIM_Cmd(TIM5,ENABLE);
   }
  }
}
TIM_ClearITPendingBit(TIM5,TIM_IT_Update|TIM_IT_CC1);
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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