【NUCLEO-L496ZG-P 试用体验】输入捕获启用不同定时器问题

  • 247784937@qq.co
  • LV4工程师
  • |      2017-10-09 20:38:23
  • 浏览量 590
  • 回复:0


用输入捕获时,我开始用的是TIM3,启用了输入捕获中断与定时溢出中断,采用1us运行时定时器,不停进入定时器溢出中断,调试半天也没有解决问题。 猜想是不是定时器问题, 于是才用了TIM4,TIM5输入捕获中断与定时溢出中断 启用对比后发现TIM3,TIM4是16位定时器,而TIM5是32位定时器,运用TIM5输入捕获与定时器溢出中断,就没有遇到TIM3与TIM4遇到的问题 对于上述问题,我思考了下,查阅了定时器的定时原理,与输入捕获的关系, 发现定时器是从启动就一直计数,不管输入捕获引脚是否有高电平,所以TIM3与TIM4的16位定时器65536us(约66ms)就溢出一次,就造成了当输入捕获与定时器溢出中断同时打开时,溢出中断不同执行,占用了内存。 为了印证我的思想,我在主函数中加入了下面代码,打印定时器计数寄存器当前值,看看计数寄存器运行情况。
 RED_TOG;

  delayms(500);

  printf("TIM5 COUNT : %d \r\n",__HAL_TIM_GET_COUNTER(&htim5));

  

  if( (TIM4CH1_CAPTURE_STA&0x80) )

  {

    TIM4temp = TIM4CH1_CAPTURE_STA&0x3f;

    TIM4temp *= 0xFFFF;

    TIM4temp += TIM4CH1_CAPTURE_VAL;

    printf("TIM4 Channel_1 Capture rising is %d us \r\n", TIM4temp);

    TIM4CH1_CAPTURE_STA = 0;

  }
运行结果如下所示: 可以看出,不管输入捕获引脚情况如何,定时器是一直1在运行状态, 所以在输入捕获引脚有输入时,应该记录定时器当前的值,或者清零定时器计数寄存器当前值。 这种小问题,如果不细心,真是让人头疼,当时就是调试了好久才搞通问题所在。
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:0
x
收藏成功!点击 我的收藏 查看收藏的全部帖子