打印
[STM32F1]

又遇到难题了~各位大神请指导下~ @定时器延时

[复制链接]
1004|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yang5223536|  楼主 | 2015-12-3 13:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
定时器,使用库,希望可以实现中断延时,达到毫秒级
下边这样配置后,中断的延时大概2ms多一点(测试过)
1.是否是我下面程序设置的问题呢?
2.还是我系统定时器的初始化有问题?
3.应该怎样配置呢?
请高手指点一下,不胜感激,以分款待~
void TimDelay1(u16 Time)//使用定时器4 以中断方式延时 ms
{
  TIM_ClearITPendingBit(TIM4, TIM_IT_CC1);
  TIM_SetCompare1(TIM4, TIM4->CNT + Time);
  TIM_ITConfig(TIM4, TIM_IT_CC1,ENABLE);
}

void TimDelay2(u16 Time)//使用定时器4 以中断方式延时 ms
{
  TIM_ClearITPendingBit(TIM4, TIM_IT_CC2);
  TIM_SetCompare2(TIM4, TIM4->CNT + Time);
  TIM_ITConfig(TIM4, TIM_IT_CC2,ENABLE);
}

void TimDelay3(u16 Time)//使用定时器4 以中断方式延时 ms
{
  TIM_ClearITPendingBit(TIM4, TIM_IT_CC3);
  TIM_SetCompare3(TIM4, TIM4->CNT + Time);
  TIM_ITConfig(TIM4, TIM_IT_CC3,ENABLE);
}

void TimDelay4(u16 Time)//使用定时器4 以中断方式延时 ms
{
  TIM_ClearITPendingBit(TIM4, TIM_IT_CC4);
  TIM_SetCompare4(TIM4, TIM4->CNT + Time);
  TIM_ITConfig(TIM4, TIM_IT_CC4,ENABLE);
}
沙发
sjw1716094642| | 2015-12-3 13:54 | 只看该作者
你的程序,好有问题。。更新中断和比较寄存器有什么关系

使用特权

评论回复
板凳
yang5223536|  楼主 | 2015-12-3 14:02 | 只看该作者
sjw1716094642 发表于 2015-12-3 13:54
你的程序,好有问题。。更新中断和比较寄存器有什么关系

:dizzy: 定时器这里我刚刚接触,程序运行时间不对,所以找问题找到了这里~我也是感觉很困惑,所以贴出来 看看是哪里的问题,怎样解决。。。您能给点提示不?

使用特权

评论回复
地板
sjw1716094642| | 2015-12-3 14:25 | 只看该作者
yang5223536 发表于 2015-12-3 14:02
定时器这里我刚刚接触,程序运行时间不对,所以找问题找到了这里~我也是感觉很困惑,所以贴出来  ...

用的是更新中断,不需要TIM_IT_CC4这个东西

使用特权

评论回复
5
yang5223536|  楼主 | 2015-12-3 14:39 | 只看该作者
sjw1716094642 发表于 2015-12-3 14:25
用的是更新中断,不需要TIM_IT_CC4这个东西

  if (TIM_GetITStatus(TIM4, TIM_IT_CC2) != RESET)
  {
        //用户代码
        E32_TIMER0TimerBeat++;//定时器0计时心跳
        E16_ECUCommData_time++;

通过中断,每计数一次,就可以进中断一次  而这里我希望进来一次的时间是ms级
理想是:通过TIM_IT_CC4 这个库函数来实现捕获和与中断源比较,我的时间计数
我也是感觉到,这个库函数有些。。。所以您能给个实际的方案什么的嘛?比如不用这个,我要用哪一个才能实现功能呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

23

帖子

0

粉丝